Intern
Co se stane, pokud se čítač sync.WaitGroup stane záporným kvůli nadměrným voláním Done ve srovnání s Add?
sobes.tech AI
Odpověď od AI
Pokud se čítač sync.WaitGroup v Go stane záporným kvůli tomu, že volání Done() je více než Add(), dojde za běhu k panice (panic).
WaitGroup sleduje počet očekávaných gorutin pomocí čítače. Při volání Add(n) se čítač zvýší o n, při Done() se sníží o 1. Pokud čítač klesne pod nulu, považuje se to za chybu použití.
Příklad chyby:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // další volání, způsobí panic
Panic se objeví s hlášením:
panic: sync: negative WaitGroup counter
Proto je důležité přísně udržovat rovnováhu mezi Add a Done, aby se předešlo této chybě.