Junior
Mit használ a WaitGroup a Go-ban?
sobes.tech MI
Válasz az MI-től
A WaitGroup egy vagy több goroutine munkájának szinkronizálására szolgál. Lehetővé teszi a fő goroutine számára, hogy várjon más létrehozott goroutine-ok befejezésére. Egy számlálóból áll, amely növekszik a goroutine létrehozásakor, és csökken, amikor az befejeződik.
Főbb módszerek:
Add(delta int): Növeli vagy csökkenti a goroutine-ok számát.Done(): Csökkenti a számlálót 1-gyel. Általában a goroutine végén hívják (gyakrandefer-rel együtt).Wait(): Megakadályozza a végrehajtást, amíg a számláló el nem éri a nullát.
Használati példa:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Csökkenti a számlálót a goroutine végén
fmt.Printf("Goroutine %d kezdődik\n", id)
// Munka szimulálása
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d befejeződött\n", id)
}
func main() {
var wg sync.WaitGroup // WaitGroup létrehozása
for i := 1; i <= 5; i++ {
wg.Add(1) // Növeljük a számlálót minden goroutine esetében
go worker(i, &wg) // Indítjuk a goroutine-t, átadva a mutatót a WaitGroup-hoz
}
wg.Wait() // Várunk, amíg a számláló el nem éri a nullát (minden goroutine befejeződik)
fmt.Println("Minden goroutine befejeződött")
}