Junior — Middle
Můžete vysvětlit, co je to semafor v kontextu programování a synchronizace vláken?
sobes.tech AI
Odpověď od AI
Semafor je synchronizační mechanismus používaný k řízení přístupu více vláken ke sdílenému zdroji.
Obsahuje čítač, který ukazuje, kolik vláken může současně získat přístup ke zdroji. Když se vlákno chce dostat do kritické sekce, pokusí se "získat" semafor:
- Pokud je čítač větší než nula, sníží se o jedna a vlákno pokračuje.
- Pokud je čítač rovný nule, vlákno se zablokuje a čeká, až jiné vlákno uvolní semafor.
Když vlákno dokončí práci se zdrojem, uvolní semafor zvýšením čítače, což umožní dalším vláknům pokračovat.
Příklad použití semaforu ve Swift (iOS):
let semaphore = DispatchSemaphore(value: 2) // umožňuje současně 2 vlákna
DispatchQueue.global().async {
semaphore.wait() // pokusí se získat semafor
print("Vlákno začalo pracovat")
sleep(2) // simulace práce
print("Vlákno dokončilo práci")
semaphore.signal() // uvolní semafor
}
Tímto způsobem pomáhá semafor řídit počet vláken pracujících současně se sdíleným zdrojem, předchází závodním podmínkám a zajišťuje správnou funkčnost.