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