Junior — Middle
Jak je implementován mechanismus semaforu v systémech synchronizace?
sobes.tech AI
Odpověď od AI
Mechanismus semaforu v systémech synchronizace se používá k řízení přístupu ke sdíleným zdrojům více vlákny nebo procesy. Semafor je čítač, který ukazuje, kolik vláken může současně získat přístup ke zdroji.
V iOS (a obecně v systémech založených na POSIX) jsou semafory implementovány přes API, například dispatch_semaphore v GCD (Grand Central Dispatch). Hlavní operace jsou:
wait(nebowait(timeout:)) — snižuje čítač semaforu. Pokud je čítač nulový, vlákno se zablokuje a čeká, dokud jiné vlákno nevolásignal.signal— zvyšuje čítač a odblokuje čekající vlákno, pokud existuje.
Příklad použití ve Swift:
let semaphore = DispatchSemaphore(value: 1) // binární semafor
// V jednom vlákně
semaphore.wait() // pokus o vstup
// kritická sekce
semaphore.signal() // odchod
Tímto způsobem semafor umožňuje omezit počet operací, které se provádějí současně, například přístup k databázi nebo síťovému zdroji.
Důležité body:
- Pokud je hodnota semaforu větší než 1, umožňuje více vláknům projít současně.
- Pokud je 1, je to binární semafor, podobný mutexu.
- Použití semaforů pomáhá zabránit závodním podmínkám a zajišťuje správnou synchronizaci.