Sobes.tech
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.