Junior
Ի՞նչ նպատակով է օգտագործվում WaitGroup-ը Go-ում։
sobes.tech AI
Պատասխան AI-ից
WaitGroup օգտագործվում է մեկ կամ մի քանի goroutine-ների աշխատանքը սինխրոնիզացնելու համար: Դա թույլ է տալիս հիմնական goroutine-ին սպասել ստեղծված այլ goroutine-ների ավարտին: Այն բաղկացած է հաշվիչից, որը մեծանում է goroutine ստեղծելիս և նվազում է, երբ այն ավարտվում է:
Հիմնական մեթոդներ՝
Add(delta int): Հաշվիչը մեծացնում կամ նվազեցնում է goroutine-ների քանակը:Done(): Հաղորդում է հաշվիչին, որ goroutine-ը ավարտվել է (հաճախdefer-ի հետ):Wait(): Բլոկավորում է գործարկումը մինչև հաշվիչը դառնա զրո:
Օգտագործման օրինակ՝
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Նվազեցնում է հաշվիչը goroutine- ի ավարտին
fmt.Printf("Goroutine %d սկսվում է\n", id)
// Աշխատանքի սիմուլացիա
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d ավարտվեց\n", id)
}
func main() {
var wg sync.WaitGroup // Ստեղծում է WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Մեծացնում է հաշվիչը յուրաքանչյուր goroutine-ի համար
go worker(i, &wg) // Սկսում է goroutine, փոխանցելով ցուցիչը
}
wg.Wait() // Կապում է գործարկումը մինչև հաշվիչը դառնա զրո
fmt.Println("Բոլոր goroutine-ները ավարտվեցին")
}