Sobes.tech
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-ը օգնում է սինխրոնիզացնել հարյուրավոր գործեր և սպասել դրանց ավարտին։