Junior — Middle
Hoe werkt de blokkering bij het aanroepen van de sync-methode op een sequentiële wachtrij?
sobes.tech AI
Antwoord van AI
Wanneer de methode sync wordt aangeroepen op een seriële wachtrij in GCD (Grand Central Dispatch), wordt de huidige thread geblokkeerd totdat de taak die aan sync is doorgegeven, is voltooid. Als sync wordt aangeroepen vanuit dezelfde thread die deze wachtrij bedient, ontstaat een deadlock, omdat de wachtrij geen nieuwe taak kan starten totdat de huidige is voltooid, en de huidige thread wacht op de voltooiing van de nieuwe taak.
Voorbeeld:
let serialQueue = DispatchQueue(label: "com.voorbeeld.serial")
serialQueue.sync {
print("Taak wordt uitgevoerd")
}
// De huidige thread is geblokkeerd tot de taak is voltooid
Het is belangrijk om sync niet aan te roepen op dezelfde seriële wachtrij vanuit een taak van die wachtrij om deadlocks te voorkomen.