Junior — Middle
Kako implementirati sinhrono čekanje na završetak više paralelnih zadataka u programu na Go?
sobes.tech АИ
Одговор од АИ
U Go-u, za sinhrono čekanje na završetak više paralelnih zadataka, obično se koristi sync.WaitGroup. To omogućava pokretanje više gorutina i čekanje da se one završe.
Primer:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Obaveštava WaitGroup da je zadatak završen
fmt.Printf("Radnik %d je počeo\n", id)
// simulacija rada
// time.Sleep(time.Second)
fmt.Printf("Radnik %d je završio\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Postavlja broj zadataka
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Čeka da se završe sve gorutine
fmt.Println("Svi radnici su završili")
}
Na ovaj način, WaitGroup omogućava efikasnu sinhronizaciju izvršavanja paralelnih zadataka.