Sobes.tech
Intern

Ce se întâmplă dacă contorul sync.WaitGroup devine negativ din cauza apelurilor suplimentare la Done în comparație cu Add?

sobes.tech AI

Răspuns de la AI

Dacă contorul sync.WaitGroup în Go devine negativ din cauza faptului că apelurile Done() sunt mai multe decât Add(), va avea loc o panică (panic) în timpul execuției.

WaitGroup urmărește numărul de gorutine așteptate printr-un contor. La apelarea lui Add(n), contorul crește cu n, iar la Done() — scade cu 1. Dacă contorul devine mai mic decât zero, acest lucru este considerat o eroare de utilizare.

Exemplu de eroare:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // apel suplimentar, va duce la panic

Panic-ul apare cu mesajul:

panic: sync: negative WaitGroup counter

De aceea, este important să mențineți un echilibru strict între Add și Done pentru a evita această eroare.