Junior — Middle
Kokios pasekmės gali būti, jei wg.Add kvietimų skaičius nesutampa su paleistų gorutinų skaičiumi?
sobes.tech AI
Atsakymas iš AI
Go kalboje sync.WaitGroup naudojamas laukiant, kol baigsis tam tikras gorutinos. Metodas wg.Add(n) padidina skaitiklį n, o wg.Done() sumažina jį 1. Jei wg.Add kvietimų skaičius nesutampa su paleistų gorutinos skaičiumi (t. y., wg.Done kvietimais), tada:
- Jei
wg.Addyra mažiau neiwg.Done, tada kviečiantwg.Done, skaitiklis gali tapti neigiamas, kas sukels runtime panic. - Jei
wg.Addyra didesnis neiwg.Done,wg.Wait()veiks amžinai, nes skaitiklis nepasieks nulio — tai sukels deadlock.
Todėl svarbu prieš paleidžiant gorutinas iškviesti wg.Add su teisingu skaičiumi ir tiksliai tiek kartų kviesti wg.Done, kiek buvo pridėta.