Sobes.tech
Junior — Middle

El tudná magyarázni, hogyan működik a WaitGroup segítségével több goroutine befejezésének várakozási mechanizmusa Go-ban?

sobes.tech MI

Válasz az MI-től

Go-ban a sync.WaitGroup típus használható több goroutine befejezésének várására. Lehetővé teszi, hogy több goroutine-ra "feliratkozzunk" és blokkoljuk a végrehajtást, amíg mindegyik be nem fejeződik.

A WaitGroup főbb módszerei:

  • Add(n int) — növeli a számlálót n-gyel, általában a goroutine-ok indítása előtt hívják.
  • Done() — csökkenti a számlálót 1-gyel, minden goroutine végén hívják.
  • Wait() — blokkolja a végrehajtást, amíg a számláló el nem éri a 0-t.

Használati példa:

var wg sync.WaitGroup

wg.Add(3) // 3 goroutine várása

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // befejezés jelzése
        fmt.Printf("Goroutine %d fut\n", id)
        // valamilyen munka
    }(i)
}

wg.Wait() // várunk, amíg minden goroutine be nem fejeződik
fmt.Println("Minden goroutine befejeződött")