Sobes.tech
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 (sau acquire), 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 (sau release), 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.