Sobes.tech
Junior — Middle

wg.Add чакыруларынын саны ишке ашырылып жаткан goroutineдардын санына туура келбесе, кандай натыйжалар болот?

sobes.tech AI

AIден жооп

Go тилде, sync.WaitGroup бир топ горутиндин аяктоо күтүү үчүн колдонулат. wg.Add(n) методу эсептегичти nге көбөйтөт, ал эми wg.Done() аны 1ге азайтат. Эгер wg.Add чакырууларынын саны ишке киргизилген горутиндердин санына (демек, wg.Done чакырууларына) туура келбесе, анда:

  • Эгер wg.Add wg.Doneдан азыраак болсо, wg.Done чакырылганда эсептегич терс мааниге өтүшү мүмкүн, бул иштөө учурунда паникага (runtime panic) алып келет.
  • Эгер wg.Add wg.Doneдан көп болсо, wg.Wait() эч качан токтоп калат, анткени эсептегич нөлгө жетпейт — бул deadlock-ка алып келет.

Ошондуктан, goroutine-лорду ишке киргизүүдөн мурун wg.Add туура сан менен чакырылуусу жана wg.Done так ошол санга чакырылуусу маанилүү.