Junior — Middle
Cum se implementează mecanismul semafor în sistemele de sincronizare?
sobes.tech AI
Răspuns de la AI
Mecanismul semaforului în sistemele de sincronizare este utilizat pentru a controla accesul la resursele comune de către mai multe fire sau procese. Semaforul este un contor care indică câte fire pot accesa simultan o resursă.
În iOS (și în sistemele bazate pe POSIX în general), semafoarele sunt implementate prin API-uri, de exemplu, dispatch_semaphore în GCD (Grand Central Dispatch). Operațiunile principale sunt:
wait(sauwait(timeout:)) — scade contorul semaforului. Dacă contorul este zero, firul se blochează și așteaptă până când alt fir apeleazăsignal.signal— crește contorul, deblochează firul care așteaptă, dacă există.
Exemplu de utilizare în Swift:
let semaphore = DispatchSemaphore(value: 1) // semafor binar
// Într-un fir
semaphore.wait() // încearcă să intre
// secțiune critică
semaphore.signal() // iese
Astfel, semaforul permite limitarea numărului de operații care rulează simultan, de exemplu, accesul la o bază de date sau la o resursă de rețea.
Puncte importante:
- Dacă valoarea semaforului este mai mare decât 1, permite mai multor fire să treacă în același timp.
- Dacă este 1, este un semafor binar, similar cu un mutex.
- Utilizarea semafoarelor ajută la evitarea condițiilor de cursă și asigură o sincronizare corectă.