Junior — Middle
Quelles conséquences se produiront si le nombre d'appels à wg.Add ne correspond pas au nombre de goroutines en cours d'exécution?
sobes.tech IA
Réponse de l'IA
En Go, sync.WaitGroup est utilisé pour attendre la fin d'un ensemble de goroutines. La méthode wg.Add(n) augmente le compteur de n, et wg.Done() le diminue de 1. Si le nombre d'appels à wg.Add ne correspond pas au nombre de goroutines lancées (c'est-à-dire, les appels à wg.Done), alors :
- Si
wg.Addest inférieur au nombre dewg.Done, lors de l'appel àwg.Done, le compteur peut devenir négatif, ce qui entraînera une panic (erreur d'exécution). - Si
wg.Addest supérieur au nombre dewg.Done, l'appel àwg.Wait()sera bloqué indéfiniment, car le compteur n'atteindra pas zéro — cela mènera à un deadlock.
Il est donc important d'appeler wg.Add avec le bon nombre avant de lancer les goroutines et d'appeler wg.Done exactement autant de fois que cela a été ajouté.