Sobes.tech
Junior — Middle

Quali conseguenze si verificano se il numero di chiamate a wg.Add non corrisponde al numero di goroutine in esecuzione?

sobes.tech AI

Risposta dell'AI

In Go, sync.WaitGroup viene utilizzato per attendere il completamento di un insieme di goroutine. Il metodo wg.Add(n) aumenta il contatore di n, e wg.Done() lo diminuisce di 1. Se il numero di chiamate a wg.Add non corrisponde al numero di goroutine avviate (cioè, chiamate a wg.Done), allora:

  • Se wg.Add è inferiore al numero di wg.Done, al chiamare wg.Done, il contatore può diventare negativo, causando un panic (errore di runtime).
  • Se wg.Add è superiore al numero di wg.Done, la chiamata a wg.Wait() si bloccherà per sempre, poiché il contatore non raggiungerà zero — ciò porterà a un deadlock.

Perciò, è importante chiamare wg.Add con il numero corretto prima di avviare le goroutine e chiamare wg.Done esattamente tante volte quante sono state aggiunte.