Sobes.tech
Intern

¿Qué ocurrirá si el contador de sync.WaitGroup se vuelve negativo debido a llamadas adicionales a Done en comparación con Add?

sobes.tech AI

Respuesta de la IA

Si el contador de sync.WaitGroup en Go se vuelve negativo debido a que las llamadas a Done() son mayores que las llamadas a Add(), ocurrirá un pánico (panic) en tiempo de ejecución.

WaitGroup rastrea la cantidad de goroutines esperadas mediante un contador. Al llamar a Add(n), el contador aumenta en n, y al llamar a Done() — disminuye en 1. Si el contador se vuelve menor que cero, se considera un error de uso.

Ejemplo de error:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // llamada adicional, provocará panic

El pánico se produce con el mensaje:

panic: sync: negative WaitGroup counter

Por lo tanto, es importante mantener un equilibrio estricto entre Add y Done para evitar este error.