Junior — Middle
Wat zijn de gevolgen als het aantal oproepen naar wg.Add niet overeenkomt met het aantal goroutines dat wordt uitgevoerd?
sobes.tech AI
Antwoord van AI
In Go wordt sync.WaitGroup gebruikt om te wachten op de voltooiing van een set goroutines. De methode wg.Add(n) verhoogt de teller met n, en wg.Done() verlaagt deze met 1. Als het aantal aanroepen van wg.Add niet overeenkomt met het aantal gestartte goroutines (dus, de aanroepen van wg.Done), dan:
- Als
wg.Addminder is dan het aantalwg.Done, kan de teller negatief worden bij het aanroepen vanwg.Done, wat leidt tot een runtime panic. - Als
wg.Addmeer is dan het aantalwg.Done, zalwg.Wait()voor altijd blokkeren omdat de teller nooit nul wordt — dit leidt tot een deadlock.
Het is daarom belangrijk om wg.Add met het juiste aantal aan te roepen voordat je de goroutines start en wg.Done precies zo vaak te roepen als dat is toegevoegd.