Middle+
Mesélj többet a WaitGroup-ról: hogyan működik, mit csinálnak az Add, Done, Wait?
sobes.tech MI
Válasz az MI-től
A WaitGroup a Go-ban arra szolgál, hogy várjon egy goroutine-csoport befejezésére.
- Add(n int) — növeli a számlálót n-nel, általában a goroutine-ok indítása előtt hívják.
- Done() — csökkenti a számlálót 1-gyel, a goroutine végrehajtása után hívják.
- Wait() — blokkolja a végrehajtást, amíg a számláló el nem éri a nullát, azaz amíg minden goroutine meghívja a Done-t.
Példa:
var wg sync.WaitGroup
wg.Add(3) // 3 goroutine-t várunk
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "befejeződött")
}(i)
}
wg.Wait() // várunk, amíg minden goroutine befejeződik
fmt.Println("Minden goroutine befejeződött")
Így a WaitGroup segít párhuzamos feladatok szinkronizálásában és azok befejezésének várásában.