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