Junior — Middle
Puteți explica ce este un semafor și cum este folosit pentru sincronizarea proceselor?
sobes.tech AI
Răspuns de la AI
Semaforul este un mecanism de sincronizare utilizat pentru a gestiona accesul la o resursă partajată într-un mediu multithread sau multiproces. Conține un contor care indică câte fire sau procese pot accesa simultan resursa.
Principiul de funcționare:
- Inițial, contorul semaforului este setat la numărul de resurse disponibile.
- Când un fir dorește să acceseze, apelează operațiunea
wait(sauacquire), care scade contorul. - Dacă contorul devine mai mic decât zero, firul este blocat, așteptând eliberarea resursei.
- Când firul eliberează resursa, apelează
signal(saurelease), care crește contorul și deblochează firele în așteptare.
Pe iOS, pentru a lucra cu semafoare, se folosește adesea clasa DispatchSemaphore din GCD:
let semaphore = DispatchSemaphore(value: 1) // 1 indică faptul că resursa este disponibilă pentru un fir
// În fir:
semaphore.wait() // așteaptă până când resursa devine disponibilă
// Lucru cu resursa
semaphore.signal() // eliberează resursa
Astfel, semafoarele ajută la evitarea condițiilor de cursă și asigură un acces corect la resursele partajate.