Sobes.tech
Intern

Cosa succede se il contatore di sync.WaitGroup diventa negativo a causa di chiamate extra a Done rispetto a Add?

sobes.tech AI

Risposta dell'AI

Se il contatore di sync.WaitGroup in Go diventa negativo a causa di chiamate Done() più numerose di Add(), si verificherà un panic (panico) in fase di runtime.

WaitGroup tiene traccia del numero di goroutine attese tramite un contatore. Quando si chiama Add(n), il contatore aumenta di n, e con Done() — diminuisce di 1. Se il contatore diventa inferiore a zero, si considera un errore di utilizzo.

Esempio di errore:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // chiamata extra, causerà un panic

Il panic si verifica con il messaggio:

panic: sync: negative WaitGroup counter

Perciò, è importante mantenere un equilibrio rigoroso tra Add e Done per evitare questo errore.