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.