Junior — Middle
Ako implementovať synchronné čakanie na dokončenie viacerých paralelných úloh v programe v Go?
sobes.tech AI
Odpoveď od AI
V jazyku Go sa sa obično za sinhrono čakanje na dokončanje več paralelnih nalogov uporablja sync.WaitGroup. To omogoča zagon več gorutin in čakanje na njihov zaključek.
Primer:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Obvesti WaitGroup, da je naloga zaključena
fmt.Printf("Delavec %d je začel\n", id)
// simulacija dela
// time.Sleep(time.Second)
fmt.Printf("Delavec %d je končal\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Nastavi število nalog
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Čaka na zaključek vseh gorutin
fmt.Println("Vsi delavci so zaključili")
}
Na ta način WaitGroup omogoča učinkovito sinhronizacijo izvajanja paralelnih nalogov.