Sobes.tech
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.Add est inférieur au nombre de wg.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.Add est supérieur au nombre de wg.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é.