Junior
Come nel linguaggio di programmazione (Go) rilevare che tutti i goroutine in esecuzione sono terminati e il thread principale può utilizzare i risultati?
sobes.tech AI
Risposta dell'AI
In Go, per monitorare il completamento di tutte le goroutine in esecuzione, si utilizza generalmente il tipo sync.WaitGroup. Questo permette al thread principale di attendere che tutte le goroutine terminino l'esecuzione.
Esempio di utilizzo:
var wg sync.WaitGroup
wg.Add(3) // aspetta 3 goroutine
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // segnala il completamento della goroutine
// lavoro della goroutine
fmt.Println("Goroutine", id, "completata")
}(i)
}
wg.Wait() // il thread principale si blocca finché il contatore di wg non diventa 0
fmt.Println("Tutte le goroutine sono terminate, i risultati possono essere usati")
In questo modo, WaitGroup consente di sincronizzare l'esecuzione e garantisce che il thread di controllo aspetti il completamento di tutti i compiti paralleli.