Sobes.tech
Junior — Middle

Milyen helyzetekben célszerű a Semaphore mechanizmust alkalmazni szálak szinkronizálására?

sobes.tech MI

Válasz az MI-től

A Semaphore (szemafor) mechanizmusát arra használják, hogy korlátozzák az egyidejűleg hozzáférő szálak számát egy adott erőforráshoz vagy kritikus szekcióhoz.

Javasolt szemafort alkalmazni, amikor:

  • Szükség van az egyidejű műveletek számának korlátozására, például kapcsolatok pooljához való hozzáférés vagy korlátozott számú fájlhoz.
  • Ellenőrizni kell a párhuzamosságot, hogy elkerüljük a rendszer túlterhelését.
  • Szálak szinkronizálására van szükség, amikor több szálnak várnia kell az erőforrás felszabadulására.

iOS-en a szemaforokat gyakran használják aszinkron feladatok kezelésére, például több művelet befejezésének várására vagy a párhuzamosan végrehajtott feladatok számának korlátozására.

Swiftben a DispatchSemaphore használatának példája:

let semaphore = DispatchSemaphore(value: 3) // maximum 3 szál egyszerre

func accessResource() {
    semaphore.wait() // csökkenti a számlálót, ha 0, a szál blokkolódik
    // Erőforrással való munka
    print("Szál hozzáfért")
    sleep(1) // munka szimulálása
    semaphore.signal() // növeli a számlálót, helyet szabadít fel
}

for _ in 1...10 {
    DispatchQueue.global().async {
        accessResource()
    }
}

Ebben a példában legfeljebb 3 szál dolgozhat ugyanazzal az erőforrással egy időben.