Middle+
Papaskink man daugiau apie WaitGroup: kaip veikia, ką daro Add, Done, Wait?
sobes.tech AI
Atsakymas iš AI
Go kalboje WaitGroup naudojamas laukti, kol baigsis gorutinos grupė.
- Add(n int) — padidina skaitiklį n, dažniausiai kviečiama prieš paleidžiant gorutinas.
- Done() — sumažina skaitiklį 1, kviečiama gorutinoje po darbo pabaigos.
- Wait() — blokuoja vykdymą, kol skaitiklis nepasiekia nulio, t.y., kol visos gorutinos nebus iškvietusios Done.
Pavyzdys:
var wg sync.WaitGroup
wg.Add(3) // laukiame 3 gorutinų
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Gorutina", id, "baigta")
}(i)
}
wg.Wait() // laukiame, kol baigsis visos gorutinos
fmt.Println("Visos gorutinos baigtos")
Šiuo būdu WaitGroup padeda sinchronizuoti paralelines užduotis ir jų pabaigą laukti.