Junior — Middle
Za akých podmienok použitie main.sync nevedie k vzájomnému zablokovaniu vlákien?
sobes.tech AI
Odpoveď od AI
Použitie DispatchQueue.main.sync nezpôsobí vzájomné zablokovanie (deadlock) iba v prípade, že volanie nie je vykonané z hlavného vlákna. Ak voláte main.sync z hlavného vlákna, toto vlákno bude čakať na dokončenie bloku, ktorý nemôže začať, pretože hlavné vlákno je už obsadené — čo spôsobí deadlock.
Príklad bezpečného použitia:
DispatchQueue.global().async {
DispatchQueue.main.sync {
// Aktualizácia UI
}
}
Tu je volanie main.sync vykonané z pozadia vlákna, takže nedochádza k zablokovaniu. Hlavné pravidlo je nikdy nevolať DispatchQueue.main.sync z hlavného vlákna.