Junior
რა მიზნით გამოიყენება WaitGroup Go-ში?
sobes.tech AI
პასუხი AI-სგან
WaitGroup ერთ ან რამდენიმე goroutine-ის მუშაობის სინქრონიზაციისთვის გამოიყენება. ეს საშუალებას აძლევს მთავარ goroutine-ს დაელოდოს შექმნილი სხვა goroutine-ების დასრულებას. იგი შედგება გამრიცხველისგან, რომელიც იზრდება goroutine-ის შექმნისას და მცირდება მისი დასრულებისას.
ძირითადი მეთოდები:
Add(delta int): ზრდის ან მცირედით ამცირებს goroutine-ების რაოდენობას.Done(): მცირედით ამცირებს გამრიცხველს 1-ით. ჩვეულებრივ, გამოიძახება 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() // დაელოდეთ, სანამ გამრიცხველი არ გახდება ნული (ყველა goroutine დასრულდება)
fmt.Println("ყველა goroutine დასრულდა")
}