Junior — Middle
Cum se implementează o așteptare sincronă pentru finalizarea mai multor sarcini paralele într-un program Go?
sobes.tech AI
Răspuns de la AI
În Go, pentru a aștepta în mod sincron finalizarea mai multor sarcini paralele, se folosește de obicei sync.WaitGroup. Acesta permite lansarea mai multor goroutines și așteptarea finalizării acestora.
Exemplu:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Informați WaitGroup că sarcina s-a finalizat
fmt.Printf("Worker %d a început\n", id)
// simulare de muncă
// time.Sleep(time.Second)
fmt.Printf("Worker %d a terminat\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Stabilește numărul de sarcini
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Așteaptă finalizarea tuturor goroutine-urilor
fmt.Println("Toți lucrătorii au terminat")
}
Astfel, WaitGroup permite sincronizarea eficientă a execuției sarcinilor paralele.