Middle+
Ասացեք ինձ ավելին WaitGroup-ի մասին՝ ինչպես է աշխատում, ինչ են անում Add, Done, Wait-ը։
sobes.tech AI
Պատասխան AI-ից
Go-ում WaitGroup-ը օգտագործվում է խմբի goroutines-ների ավարտը սպասելու համար:
- Add(n int) — ավելացնում է հաշվիչը n-ով, սովորաբար կոչվում է goroutines-ները սկսելուց առաջ:
- Done() — նվազեցնում է հաշվիչը 1-ով, կոչվում է goroutine-ի մեջ աշխատանքի ավարտից հետո:
- Wait() — բլոկավորում է գործարկումը մինչև հաշվիչը դառնա զրո, այսինքն մինչև բոլոր goroutines-ները կանչեն Done:
Օրինակ՝
var wg sync.WaitGroup
wg.Add(3) // սպասում ենք 3 goroutines-ի
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done()
fmt.Println("Goroutine", id, "ավարտվեց")
}(i)
}
wg.Wait() // սպասում ենք բոլոր goroutines-ների ավարտին
fmt.Println("Բոլոր goroutines-ները ավարտվեցին")
Այս կերպ, WaitGroup-ը օգնում է սինխրոնիզացնել հարյուրավոր գործեր և սպասել դրանց ավարտին։