Intern
Que se passe-t-il si le compteur de sync.WaitGroup devient négatif en raison d'appels supplémentaires à Done par rapport à Add?
sobes.tech IA
Réponse de l'IA
Si le compteur de sync.WaitGroup en Go devient négatif parce que les appels à Done() sont plus nombreux que ceux à Add(), une panique (panic) se produira à l'exécution.
WaitGroup suit le nombre de goroutines attendues via un compteur. Lorsqu'on appelle Add(n), le compteur augmente de n, et avec Done() — diminue de 1. Si le compteur devient inférieur à zéro, cela est considéré comme une erreur d'utilisation.
Exemple d'erreur :
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // appel supplémentaire, provoquera un panic
La panique se produit avec le message :
panic: sync: negative WaitGroup counter
Il est donc crucial de maintenir un équilibre strict entre Add et Done pour éviter cette erreur.