Sobes.tech
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.