Junior — Middle
Puteți explica principiul de funcționare al semaforului în programarea multi-thread?
sobes.tech AI
Răspuns de la AI
Un semafor este un mecanism de sincronizare în programarea multi-thread care controlează accesul la o resursă partajată. Conține un contor care indică câte fire pot accesa simultan resursa.
Principiul de funcționare:
- Inițial, contorul semaforului este setat la un număr egal cu numărul de resurse disponibile.
- Când un fir dorește să acceseze, apelează operațiunea "wait" (sau "acquire"), care scade contorul cu 1.
- Dacă contorul devine mai mic decât zero, firul este blocat și așteaptă până când alt fir eliberează resursa.
- Când un fir eliberează resursa, apelează operațiunea "signal" (sau "release"), care crește contorul cu 1 și deblochează firele în așteptare.
Exemplu în Swift folosind DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 2) // permitem 2 fire simultan
DispatchQueue.global().async {
semaphore.wait() // încercăm să accesăm
print("Firul a început să lucreze")
sleep(2) // simulare de lucru
print("Firul a terminat de lucrat")
semaphore.signal() // eliberăm resursa
}
Astfel, semaforul ajută la limitarea numărului de fire care lucrează simultan cu o resursă partajată, prevenind condițiile de cursă și asigurând integritatea datelor.