Sobes.tech
Junior — Middle

¿Qué consecuencias ocurrirán si la cantidad de llamadas a wg.Add no coincide con el número de goroutines en ejecución?

sobes.tech AI

Respuesta de la IA

En Go, sync.WaitGroup se utiliza para esperar a que finalicen un conjunto de goroutines. El método wg.Add(n) incrementa el contador en n, y wg.Done() lo decrementa en 1. Si el número de llamadas a wg.Add no coincide con el número de goroutines lanzadas (es decir, las llamadas a wg.Done), entonces:

  • Si wg.Add es menor que el número de wg.Done, al llamar a wg.Done el contador puede volverse negativo, lo que provocará un pánico (error en tiempo de ejecución).
  • Si wg.Add es mayor que el número de wg.Done, la llamada a wg.Wait() se bloqueará para siempre, ya que el contador no llegará a cero — esto conducirá a un deadlock.

Por lo tanto, es importante llamar a wg.Add con el número correcto antes de lanzar las goroutines y llamar a wg.Done exactamente la misma cantidad de veces que se añadió.