Junior — Middle
Quais as consequências de ocorrerem se o número de chamadas a wg.Add não corresponder ao número de goroutines em execução?
sobes.tech IA
Resposta da IA
No Go, sync.WaitGroup é usado para aguardar a conclusão de um conjunto de goroutines. O método wg.Add(n) aumenta o contador em n, e wg.Done() diminui-o em 1. Se o número de chamadas a wg.Add não corresponder ao número de goroutines lançadas (ou seja, chamadas a wg.Done), então:
- Se
wg.Addfor menor que o número dewg.Done, ao chamarwg.Done, o contador pode ficar negativo, o que causará um pânico (erro em tempo de execução). - Se
wg.Addfor maior que o número dewg.Done, a chamada awg.Wait()ficará bloqueada para sempre, pois o contador não atingirá zero — isso levará a um deadlock.
Portanto, é importante chamar wg.Add com o número correto antes de iniciar as goroutines e chamar wg.Done exatamente o mesmo número de vezes que foi adicionado.