Middle+
WaitGroup жөнүндө көбүрөөк айтып бер: ал кандай иштейт, Add, Done, Wait эмне кылат?
sobes.tech AI
AIден жооп
Go'да WaitGroup бир топ goroutine'лердин аякташын күтүү үчүн колдонулат.
- Add(n int) — эсептегичти nге көбөйтөт, адатта goroutine'лерди ишке киргизүүдөн мурун чакырылат.
- Done() — эсептегичти 1ге азайтат, иш аяктагандан кийин goroutine ичинде чакырылат.
- Wait() — эсептегич нөлгө жеткенче ишти токтотот, башкача айтканда, бардык goroutine'лер Done чакырганча күтөт.
Мисал:
var wg sync.WaitGroup
wg.Add(3) // 3 goroutine күтүп жатабыз
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "аяктады")
}(i)
}
wg.Wait() // бардык goroutine'лер аяктагандан кийин күтөт
fmt.Println("Бардык goroutine'лер аяктады")
Мындайча айтканда, WaitGroup параллел иштерди синхрондоштуруу жана алардын аяктоо убактысын күтүүгө жардам берет.