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.