Sobes.tech
Intern

O que acontece se o contador do sync.WaitGroup ficar negativo devido a chamadas extras de Done em comparação com Add?

sobes.tech IA

Resposta da IA

Se o contador do sync.WaitGroup em Go ficar negativo devido a chamadas Done() que são mais do que Add(), ocorrerá um pânico (panic) em tempo de execução.

O WaitGroup rastreia o número de goroutines esperadas através de um contador. Ao chamar Add(n), o contador aumenta em n, e ao chamar Done() — diminui em 1. Se o contador ficar menor que zero, isso é considerado um erro de uso.

Exemplo de erro:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // chamada extra, causará panic

O pânico ocorre com a mensagem:

panic: sync: negative WaitGroup counter

Portanto, é importante manter um equilíbrio rigoroso entre Add e Done para evitar esse erro.