Junior — Middle
Оё имкон дорад, ки дар вақти иҷрои барнома дар Go шумораи интизорон дар гурӯҳи WaitGroup тағир дода шавад?
sobes.tech AI
Ҷавоб аз AI
Дар Го, шумораи интизорони goroutine дар sync.WaitGroup метавонад дар вақти иҷрои барнома бо истифода аз усулҳои Add, Done ва Wait тағйир дода шавад.
- Метод
Add(n int)шумораи интизорони goroutine-ҳоро боnзиёд ё кам мекунад. Он метавонад чанд маротиба даъват шавад, то шумораи интизориро динамикӣ тағйир диҳад. - Метод
Done()баробар баAdd(-1)аст ва шумораи интизориро кам мекунад. - Метод
Wait()иҷрои барномаро бозмедорад, то ки шумораи интизорӣ ба сифр расад.
Маҳз: агар шумораи интизорӣ аллакай ба сифр баробар бошад, ба Add бо арзиши манфӣ даъват накунед, вагарна паника ба вуҷуд меояд.
Масалан:
var wg sync.WaitGroup
wg.Add(2) // интизорем 2 goroutine
go func() {
defer wg.Done()
// кор 1
}()
go func() {
defer wg.Done()
// кор 2
}()
// Дар раванди иҷро, метавон интизориро иловагӣ илова кард
wg.Add(1)
go func() {
defer wg.Done()
// кори иловагӣ
}()
wg.Wait() // интизорем, ки ҳама анҷом ёбанд
Бинобар ин, шумораи интизорони дар WaitGroup метавонад динамикӣ тағйир ёбад, ба шарте, ки даъватҳои дуруст ба Add ва Done иҷро шаванд.