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