Sobes.tech
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.Add yra mažiau nei wg.Done, tada kviečiant wg.Done, skaitiklis gali tapti neigiamas, kas sukels runtime panic.
  • Jei wg.Add yra didesnis nei wg.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.