Sobes.tech
Junior — Middle

Jak funguje blokování při volání metody sync na sekvenční frontě?

sobes.tech AI

Odpověď od AI

Při volání metody sync na sériové frontě v GCD (Grand Central Dispatch) je aktuální vlákno zablokováno, dokud se úkol předaný do sync ne dokončí. Pokud je sync voláno ze stejného vlákna, které obsluhuje tuto frontu, vznikne deadlock, protože fronta nemůže začít vykonávat nový úkol, dokud ten stávající neskončí, a aktuální vlákno čeká na dokončení nového úkolu.

Příklad:

let serialQueue = DispatchQueue(label: "com.priklad.serial")

serialQueue.sync {
    print("Vykonávám úkol")
}
// Aktuální vlákno je zablokováno do dokončení úkolu

Je důležité nevolat sync na téže sériové frontě uvnitř úkolu této fronty, aby nedošlo k vzájemnému zablokování.