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