Sobes.tech
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.Add minder is dan het aantal wg.Done, kan de teller negatief worden bij het aanroepen van wg.Done, wat leidt tot een runtime panic.
  • Als wg.Add meer is dan het aantal wg.Done, zal wg.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.