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