Sobes.tech
Junior — Middle

Onder welke voorwaarden zal het gebruik van main.sync niet leiden tot een onderlinge blokkering van threads?

sobes.tech AI

Antwoord van AI

Het gebruik van DispatchQueue.main.sync veroorzaakt geen deadlock, tenzij de oproep niet vanaf de hoofdthread wordt gedaan. Als je main.sync vanaf de hoofdthread aanroept, wacht die thread op de voltooiing van het blok, dat niet kan beginnen omdat de hoofdthread al bezet is — dit veroorzaakt een deadlock.

Veilig voorbeeld:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI-update
    }
}

Hier wordt de oproep main.sync gedaan vanuit een achtergrondthread, dus er ontstaat geen blokkering. De belangrijkste regel is om nooit DispatchQueue.main.sync vanaf de hoofdthread aan te roepen.