Sobes.tech
Junior — Middle

wg.Add шақыруларының саны іске қосылған горутиндердің санына сәйкес келмесе, қандай салдарлар болады?

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-қа әкеледі.

Сондықтан, горутиндерді іске қоспас бұрын wg.Add дұрыс санын шақыру және wg.Done-ды дәл wg.Add шақыруларымен бірдей санға шақыру маңызды.