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.