Junior — Middle
Ako je implementovaný mechanizmus semafora v systémoch synchronizácie?
sobes.tech AI
Odpoveď od AI
Mechanizmus semafora v systémoch synchronizácie sa používa na riadenie prístupu k zdieľaným zdrojom viacerými vláknami alebo procesmi. Semafor je čítač, ktorý ukazuje, koľko vlákien môže súčasne získať prístup ku zdroju.
V iOS (a všeobecne v systémoch založených na POSIX) sú semafory implementované cez API, napríklad dispatch_semaphore v GCD (Grand Central Dispatch). Hlavné operácie sú:
wait(alebowait(timeout:)) — znižuje čítač semafora. Ak je čítač nulový, vlákno sa zablokuje a čaká, kým iné vlákno nevolásignal.signal— zvyšuje čítač, odblokujúc čakajúce vlákno, ak existuje.
Príklad použitia v Swift:
let semaphore = DispatchSemaphore(value: 1) // binárny semafor
// V jednom vlákne
semaphore.wait() // pokus o vstup
// kritická sekcia
semaphore.signal() // odchod
Týmto spôsobom semafor umožňuje obmedziť počet operácií, ktoré sa vykonávajú súčasne, napríklad prístup k databáze alebo sieťovému zdroju.
Dôležité body:
- Ak je hodnota semafora väčšia ako 1, umožňuje viacerým vláknam prejsť súčasne.
- Ak je 1, ide o binárny semafor, podobný mutexu.
- Použitie semaforov pomáha predchádzať súťažným podmienkam a zabezpečuje správnu synchronizáciu.