Sobes.tech
Junior — Middle

V ktorých situáciách je vhodné použiť mechanizmus Semaphore na synchronizáciu vlákien?

sobes.tech AI

Odpoveď od AI

Mechanizmus Semaphore (semafor) sa využíva na obmedzenie počtu vlákien, ktoré súčasne pristupujú ku konkrétnemu zdroju alebo kritickej sekcii.

Odporúča sa použiť semafor, keď:

  • Je potrebné obmedziť počet súčasných operácií, napríklad prístup k poolu spojení alebo obmedzenému počtu súborov.
  • Je potrebné kontrolovať paralelizmus, aby sa predišlo preťaženiu systému.
  • Vyžaduje sa synchronizácia vlákien, keď viac vlákien musí čakať na uvoľnenie zdroja.

V iOS sa semafory často používajú na riadenie asynchrónnych úloh, napríklad na čakanie na dokončenie viacerých operácií alebo na obmedzenie počtu súčasne vykonávaných úloh.

Príklad použitia DispatchSemaphore v Swift:

let semaphore = DispatchSemaphore(value: 3) // maximálne 3 vlákna súčasne

func accessResource() {
    semaphore.wait() // znižuje čítač, ak je 0, vlákno sa zablokuje
    // Práca s zdrojom
    print("Vlákno získalo prístup")
    sleep(1) // simulácia práce
    semaphore.signal() // zvyšuje čítač, uvoľňuje miesto
}

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

V tomto príklade môžu najviac 3 vlákna pracovať so zdrojom súčasne.