Sobes.tech
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.