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")