Sobes.tech
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-ները ավարտվեցին")