Junior — Middle
Jak implementovat synchronní čekání na dokončení několika paralelních úkolů v programu v jazyce Go?
sobes.tech AI
Odpověď od AI
V jazyce Go se obvykle používá sync.WaitGroup k synchronnímu čekání na dokončení několika paralelních úkolů. Umožňuje spustit více gorutin a počkat na jejich dokončení.
Příklad:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Informuje WaitGroup, že úkol je dokončen
fmt.Printf("Dělník %d začal\n", id)
// simulace práce
// time.Sleep(time.Second)
fmt.Printf("Dělník %d dokončil\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Nastaví počet úkolů
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Čeká na dokončení všech gorutin
fmt.Println("Všichni dělníci dokončili")
}
Tímto způsobem WaitGroup umožňuje efektivně synchronizovat provádění paralelních úkolů.