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.