Sobes.tech
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 lygiavertis Add(-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.