Junior — Middle
Ar galima keisti laukiančiųjų skaičių WaitGroup grupėje Go programos vykdymo metu?
sobes.tech AI
Atsakymas iš AI
Go kalboje, sync.WaitGroup laukiantių gorutinių skaičius gali būti keičiama programos vykdymo metu naudojant metodus Add, Done ir Wait.
- Metodas
Add(n int)padidina arba sumažina laukiantių gorutinių skaičiųn. Jis gali būti kviečiamas kelis kartus, kad dinamiškai keistųsi laukiančiųjų skaičius. - Metodas
Done()yra lygiavertisAdd(-1)ir sumažina skaitiklį 1. - Metodas
Wait()blokuoja vykdymą, kol skaitiklis nepasieks nulio.
Svarbu: nevykdykite Add su neigiamu skaičiumi, jei skaitiklis jau yra nulis, kitaip įvyks panika.
Pavyzdys:
var wg sync.WaitGroup
wg.Add(2) // laukiame 2 gorutinių
go func() {
defer wg.Done()
// darbas 1
}()
go func() {
defer wg.Done()
// darbas 2
}()
// proceso metu galima pridėti papildomų laukiančiųjų
wg.Add(1)
go func() {
defer wg.Done()
// papildomas darbas
}()
wg.Wait() // laukiame, kol visi baigsis
Taip, WaitGroup laukiančiųjų skaičius gali būti dinamiškai keičiamas, jei teisingai kviečiami Add ir Done metodai.