Sobes.tech
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.