Junior — Middle
Ar galite paaiškinti, kaip veikia laukimo mechanizmas, kuris laukia kelių gorutinų pabaigos Go kalboje naudojant WaitGroup?
sobes.tech AI
Atsakymas iš AI
Go kalboje naudojamas sync.WaitGroup tipas, norint laukti kelių gorutinų pabaigos. Jis leidžia "užsiprenumeruoti" kelioms gorutinoms ir blokuoti vykdymą iki tol, kol visos jos nesibaigs.
Pagrindiniai WaitGroup metodai:
- Add(n int) — padidina skaitiklį n, dažniausiai kviečiamas prieš paleidžiant gorutinas.
- Done() — sumažina skaitiklį 1, kviečiamas kiekvienos gorutinės pabaigoje.
- Wait() — blokuoja vykdymą iki skaitiklis pasieks 0.
Pavyzdys:
var wg sync.WaitGroup
wg.Add(3) // laukiame 3 gorutinų
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // signalizuojame apie pabaigą
fmt.Printf("Gorutina %d vyksta\n", id)
// tam tikras darbas
}(i)
}
wg.Wait() // laukiame, kol visos gorutinos baigsis
fmt.Println("Visos gorutinos baigėsi")