Intern
Wat gebeurt er als de teller van sync.WaitGroup negatief wordt door extra aanroepen van Done in vergelijking met Add?
sobes.tech AI
Antwoord van AI
Als de teller van sync.WaitGroup in Go negatief wordt doordat Done()-aanroepen groter zijn dan Add(), zal er tijdens runtime een panic optreden.
WaitGroup houdt het aantal verwachte goroutines bij via een teller. Bij het aanroepen van Add(n) wordt de teller met n verhoogd, en bij Done() — met 1 verlaagd. Als de teller onder nul komt, wordt dit als een gebruiksfout beschouwd.
Voorbeeld van een fout:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // extra aanroep, leidt tot panic
De panic wordt weergegeven met het bericht:
panic: sync: negative WaitGroup counter
Het is daarom belangrijk om een strikte balans tussen Add en Done te bewaren om deze fout te voorkomen.