Junior — Middle
Come implementare un'attesa sincrona per il completamento di più task paralleli in un programma Go?
sobes.tech AI
Risposta dell'AI
In Go, per aspettare in modo sincrono il completamento di più task paralleli, si utilizza generalmente sync.WaitGroup. Questo permette di avviare più goroutine e attendere che tutte terminino.
Esempio:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Comunica al WaitGroup che il task è completato
fmt.Printf("Worker %d avviato\n", id)
// simulazione di lavoro
// time.Sleep(time.Second)
fmt.Printf("Worker %d terminato\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Imposta il numero di task
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Attende che tutte le goroutine finiscano
fmt.Println("Tutti i worker hanno terminato")
}
In questo modo, WaitGroup permette di sincronizzare efficacemente l'esecuzione di task paralleli.