Junior — Middle
Za jakých podmínek použití main.sync nedojde k vzájemnému zablokování vláken?
sobes.tech AI
Odpověď od AI
Použití DispatchQueue.main.sync nezpůsobí vzájemné zablokování (deadlock) pouze v případě, že volání není provedeno z hlavního vlákna. Pokud voláte main.sync z hlavního vlákna, toto vlákno bude čekat na dokončení bloku, který nemůže začít, protože hlavní vlákno je již obsazeno — což způsobí deadlock.
Příklad bezpečného použití:
DispatchQueue.global().async {
DispatchQueue.main.sync {
// Aktualizace UI
}
}
Zde je volání main.sync provedeno z pozadí vlákna, takže nedochází k zablokování. Hlavní pravidlo je nikdy nevolat DispatchQueue.main.sync z hlavního vlákna.