Sobes.tech
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 (sau wait(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ă.