Sobes.tech
Junior — Middle

Poți explica ce este un semafor în contextul programării și sincronizării firelor?

sobes.tech AI

Răspuns de la AI

Semaforul este un mecanism de sincronizare utilizat pentru a controla accesul mai multor fire la o resursă comună.

Acesta conține un contor care indică câte fire pot accesa simultan resursa. Când un fir dorește să intre în secțiunea critică, încearcă să "captureze" semaforul:

  • Dacă contorul este mai mare decât zero, acesta scade cu unu și firul continuă.
  • Dacă contorul este zero, firul se blochează și așteaptă ca alt fir să elibereze semaforul.

Când un fir termină de lucrat cu resursa, eliberează semaforul, mărind contorul, permițând altor fire să continue.

Exemplu de utilizare a semaforului în Swift (iOS):

let semaphore = DispatchSemaphore(value: 2) // permitem 2 fire simultan

DispatchQueue.global().async {
    semaphore.wait() // încearcă să captureze semaforul
    print("Firul a început să lucreze")
    sleep(2) // simulare de lucru
    print("Firul a terminat de lucrat")
    semaphore.signal() // eliberează semaforul
}

Astfel, semaforul ajută la controlul numărului de fire care lucrează simultan cu o resursă comună, prevenind condițiile de cursă și asigurând corectitudinea funcționării.