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 diwg.Done, al chiamarewg.Done, il contatore può diventare negativo, causando un panic (errore di runtime). - Se
wg.Addè superiore al numero diwg.Done, la chiamata awg.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.