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'лердин аяктооун кепилдейт, андан кийин улантат же аяктайт.