Junior — Middle
V jakých situacích je vhodné použít mechanismus Semaphore pro synchronizaci vláken?
sobes.tech AI
Odpověď od AI
Mechanismus Semaphore (semafor) se používá k omezení počtu vláken, která současně přistupují ke konkrétnímu zdroji nebo kritické sekci.
Je vhodné použít semafor, když:
- Je třeba omezit počet současných operací, například přístup k poolu spojení nebo omezenému počtu souborů.
- Je nutné kontrolovat paralelismus, aby nedošlo k přetížení systému.
- Je vyžadována synchronizace vláken, když několik vláken musí čekat na uvolnění zdroje.
V iOS se semafory často používají k řízení asynchronních úkolů, například k čekání na dokončení několika operací nebo k omezení počtu současně prováděných úkolů.
Příklad použití DispatchSemaphore ve Swift:
let semaphore = DispatchSemaphore(value: 3) // maximálně 3 vlákna současně
func accessResource() {
semaphore.wait() // sníží čítač, pokud je 0, vlákno se zablokuje
// Práce se zdrojem
print("Vlákno získalo přístup")
sleep(1) // simulace práce
semaphore.signal() // zvýší čítač, uvolní místo
}
for _ in 1...10 {
DispatchQueue.global().async {
accessResource()
}
}
V tomto příkladu může pracovat s zdrojem najednou maximálně 3 vlákna.