Sobes.tech
Intern

Čo sa stane, ak sa čítač sync.WaitGroup stane záporný kvôli nadmerným volaniam Done v porovnaní s Add?

sobes.tech AI

Odpoveď od AI

Ak sa čítač sync.WaitGroup v Go stane záporný kvôli tomu, že volania Done() sú viac ako Add(), počas behu dôjde k panike (panic).

WaitGroup sleduje počet očakávaných gorút pomocou čítača. Pri volaní Add(n) sa čítač zvýši o n, pri Done() — zníži o 1. Ak čítač klesne pod nulu, považuje sa to za chybu použitia.

Príklad chyby:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // ďalšie volanie, spôsobí panic

Panik sa objaví s hlásením:

panic: sync: negative WaitGroup counter

Preto je dôležité prísne udržiavať rovnováhu medzi Add a Done, aby sa predišlo tejto chybe.