Sobes.tech
Junior — Middle

Meg tudná magyarázni a szeminátor működési elvét a több szálas programozásban?

sobes.tech MI

Válasz az MI-től

A szemafor egy szinkronizációs mechanizmus a több szálas programozásban, amely ellenőrzi a közös erőforráshoz való hozzáférést. Tartalmaz egy számlálót, amely megmutatja, hány szál férhet hozzá egyidejűleg az erőforráshoz.

Működési elv:

  • Kezdetben a szemafor számlálóját a rendelkezésre álló erőforrások számára állítják.
  • Amikor egy szál hozzáférést szeretne, meghívja a "wait" (vagy "acquire") műveletet, ami csökkenti a számlálót 1-gyel.
  • Ha a számláló kisebb lesz nullánál, a szál blokkolódik, és vár, amíg egy másik szál felszabadítja az erőforrást.
  • Amikor egy szál felszabadítja az erőforrást, meghívja a "signal" (vagy "release") műveletet, ami növeli a számlálót 1-gyel, és feloldja a várakozó szálakat.

Swift példában DispatchSemaphore használatával:

let semaphore = DispatchSemaphore(value: 2) // lehetővé teszi, hogy egyszerre 2 szál fusson

DispatchQueue.global().async {
    semaphore.wait() // hozzáférés próbálása
    print("A szál munkába kezdett")
    sleep(2) // munka szimuláció
    print("A szál befejezte a munkát")
    semaphore.signal() // erőforrás felszabadítása
}

Így a szemafor segít korlátozni a párhuzamosan működő szálak számát egy közös erőforrással, megelőzve a versenyhelyzeteket és biztosítva az adatok integritását.