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.Addes menor que el número dewg.Done, al llamar awg.Doneel contador puede volverse negativo, lo que provocará un pánico (error en tiempo de ejecución). - Si
wg.Addes mayor que el número dewg.Done, la llamada awg.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ó.