Sobes.tech
Junior — Middle

Программда ишке ашырылып жаткан бардык гурутиндердин бүтүшүн кандай кепилдөөгө болот?

sobes.tech AI

AIден жооп

Go тилинде сырттан күч менен goroutine'ни аяктоо үчүн ички жол жок. Бардык иштеп жаткан goroutine'лердин аяктооун кепилдөө үчүн, адатта, sync.WaitGroup менен синхрондоштуруу колдонулат.

Иш принципи:

  • Ар бир goroutine башталгандан мурун wg.Add(1) чакырылат.
  • Goroutineдун акырында wg.Done() чакырылат.
  • Негизги функцияда wg.Wait() чакырылат, ал ишти токтотуп турат, чейин саноочу нөлгө жеткенге чейин.

Мисал:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // goroutine иши
}()

wg.Wait() // бардык goroutine'лердин аяктооун күтүү

Ушул жол менен программа бардык goroutine'лердин аяктооун кепилдейт, андан кийин улантат же аяктайт.