Junior — Middle
Mohol by ste vysvetliť, čo je semafor a ako sa používa na synchronizáciu procesov?
sobes.tech AI
Odpoveď od AI
Semafor je mechanizmus synchronizácie používaný na riadenie prístupu ku zdieľanému zdroju v prostredí s viacerými vláknami alebo procesmi. Obsahuje čítač, ktorý ukazuje, koľko vlákien alebo procesov môže súčasne získať prístup ku zdroju.
Princíp fungovania:
- Na začiatku je čítač semaforu nastavený na počet dostupných zdrojov.
- Keď vlákno chce získať prístup, volá operáciu
wait(aleboacquire), ktorá znižuje čítač. - Ak sa čítač stane menší ako nula, vlákno je zablokované a čaká na uvoľnenie zdroja.
- Keď vlákno uvoľní zdroj, volá
signal(aleborelease), ktorý čítač zvýši a odblokuje čakajúce vlákna.
V iOS sa na prácu so semaforami často používa trieda DispatchSemaphore z GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 znamená, že zdroj je dostupný pre jedno vlákno
// Vo vlákne:
semaphore.wait() // čaká, kým bude zdroj dostupný
// Práca so zdrojom
semaphore.signal() // uvoľní zdroj
Takto semafory pomáhajú predchádzať súťažným podmienkam a zabezpečujú správny prístup ku zdieľaným zdrojom.