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.