Sobes.tech
Junior — Middle

În ce situații este potrivit să folosiți mecanismul Semaphore pentru sincronizarea firelor?

sobes.tech AI

Răspuns de la AI

Mecanismul Semaphore (semafor) este utilizat pentru a limita numărul de fire de execuție care accesează simultan o anumită resursă sau secțiune critică.

Este recomandat să folosiți un semafor atunci când:

  • Este necesar să limitați numărul de operații simultane, de exemplu, accesul la un pool de conexiuni sau la un număr limitat de fișiere.
  • Este nevoie să controlați paralelismul pentru a evita supraîncărcarea sistemului.
  • Este necesară sincronizarea firelor de execuție, atunci când mai multe fire trebuie să aștepte eliberarea unei resurse.

În iOS, semafoarele sunt adesea folosite pentru gestionarea sarcinilor asincrone, de exemplu, pentru a aștepta finalizarea mai multor operații sau pentru a limita numărul de sarcini care rulează simultan.

Exemplu de utilizare DispatchSemaphore în Swift:

let semaphore = DispatchSemaphore(value: 3) // maximum 3 fire de execuție simultan

func accessResource() {
    semaphore.wait() // scade contorul, dacă este 0, firul de execuție se blochează
    // Lucru cu resursa
    print("Firul de execuție a obținut acces")
    sleep(1) // simulare de lucru
    semaphore.signal() // crește contorul, eliberând spațiu
}

for _ in 1...10 {
    DispatchQueue.global().async {
        accessResource()
    }
}

În acest exemplu, nu mai mult de 3 fire de execuție pot lucra cu resursa în același timp.