Sobes.tech
Junior — Middle

რა ფუნქციებს უზრუნველყოფს WaitGroup სტრუქტურა Go ენისთვის გორუტინების სინქრონიზაციისთვის?

sobes.tech AI

პასუხი AI-სგან

Go ენის ფარგლებში, sync.WaitGroup სტრუქტურა გამოიყენება რამდენიმე goroutine-ის სინქრონიზაციისთვის, რაც საშუალებას აძლევს მთავარ goroutine-ს დაელოდოს სხვა goroutine-ების დასრულებას.

WaitGroup-ის ძირითადი მეთოდები:

  • Add(delta int) — ზრდის ან ამცირებს ელოდებოდეgoroutine-ების რაოდენობას. ჩვეულებრივ, იძახება goroutine-ების დაწყებამდე.

  • Done() — ამცირებს გამოთვლას 1-ით, იძახება goroutine-ის მუშაობის დასრულებისას.

  • Wait() — ბლოკავს შესრულებას მანამ, სანამ გამოთვლა არ გახდება ნული.

გამოყენების მაგალითი:

var wg sync.WaitGroup

wg.Add(3) // ველით 3 goroutine-ს

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // სიგნალი დასრულებაზე
        fmt.Println("Goroutine", id)
    }(i)
}

wg.Wait() // ველით ყველა goroutine-ის დასრულებას
fmt.Println("ყველა goroutine დასრულდა")

ამ გზით, WaitGroup ეხმარება პარალელური შესრულების კოორდინაციაში და უზრუნველყოფს, რომ პროგრამა ადრე არ დასრულდეს.