Junior — Middle
Tudná magyarázni, hogy mi az a szemafor a programozás és a szálak szinkronizálásának kontextusában?
sobes.tech MI
Válasz az MI-től
A szignálsorompó egy szinkronizációs mechanizmus, amelyet több szál hozzáférésének szabályozására használnak egy közös erőforráshoz.
Tartalmaz egy számlálót, amely megmutatja, hány szál férhet hozzá egyidejűleg az erőforráshoz. Amikor egy szál be akar lépni a kritikus szekcióba, megpróbálja "elfogni" a szignálsorompót:
- Ha a számláló nagyobb nullánál, akkor egyel csökken, és a szál folytatódik.
- Ha a számláló nulla, a szál blokkolódik, és vár, amíg egy másik szál felszabadítja a szignálsorompót.
Amikor egy szál befejezi az erőforrás használatát, felszabadítja a szignálsorompót, növelve a számlálót, lehetővé téve más szálak számára a folytatást.
Swift (iOS) példakód a szignálsorompó használatára:
let semaphore = DispatchSemaphore(value: 2) // engedélyezi, hogy 2 szál egyidejűleg fusson
DispatchQueue.global().async {
semaphore.wait() // megpróbálja elfogni a szignálsorompót
print("Szál elkezdett dolgozni")
sleep(2) // munka szimuláció
print("Szál befejezte a munkát")
semaphore.signal() // felszabadítja a szignálsorompót
}
Így a szignálsorompó segít szabályozni, hogy hány szál dolgozik egyszerre egy közös erőforráson, megelőzve a versenyhelyzeteket és biztosítva a helyes működést.