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