Sobes.tech
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.Add for menor que o número de wg.Done, ao chamar wg.Done, o contador pode ficar negativo, o que causará um pânico (erro em tempo de execução).
  • Se wg.Add for maior que o número de wg.Done, a chamada a wg.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.