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.