Intern
Šta će se desiti ako brojčanik sync.WaitGroup postane negativan zbog dodatnih poziva Done u poređenju sa Add?
sobes.tech АИ
Одговор од АИ
Ako se brojač sync.WaitGroup u Go postane negativan zbog toga što su pozivi Done() veći od Add(), tokom izvršavanja će doći do panike (panic).
WaitGroup prati broj očekivanih gorutina pomoću brojača. Kada se pozove Add(n), brojač se povećava za n, a kada se pozove Done() — smanjuje za 1. Ako brojač postane manji od nule, smatra se greškom u korišćenju.
Primer greške:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // dodatni poziv, izazvaće panic
Panik se javlja sa porukom:
panic: sync: negative WaitGroup counter
Zato je važno strogo održavati ravnotežu između Add i Done kako bi se izbegla ova greška.