Junior — Middle
Come garantire che tutte le goroutine in esecuzione in un programma vengano completate?
sobes.tech AI
Risposta dell'AI
In Go non esiste un modo integrato per terminare forzatamente una goroutine dall'esterno. Per garantire che tutte le goroutine in esecuzione terminino, si utilizza generalmente la sincronizzazione con sync.WaitGroup.
Principio di funzionamento:
- Prima di avviare ogni goroutine, si chiama
wg.Add(1). - Alla fine della goroutine, si chiama
wg.Done(). - Nella funzione principale, si chiama
wg.Wait(), che blocca l'esecuzione fino a quando il contatore non diventa zero.
Esempio:
var wg sync.WaitGroup
wg.Add(1)
go func() {
defer wg.Done()
// lavoro della goroutine
}()
wg.Wait() // attendere la terminazione di tutte le goroutine
In questo modo, il programma garantisce di attendere la terminazione di tutte le goroutine prima di continuare o terminare.