Sobes.tech
Junior — Middle

Go dilində WaitGroup strukturu goroutine-lərin sinxronizasiyası üçün hansı funksiyaları təmin edir?

sobes.tech Süni İntellekt

AI-dan cavab

Go dilində, sync.WaitGroup strukturu çox sayda goroutine-i sinxronlaşdırmaq üçün istifadə olunur və əsas goroutine-in digər goroutine-lərin tamamlanmasını gözləməsinə imkan verir.

WaitGroup-un əsas metodları:

  • Add(delta int) — gözlənilən goroutine-lərin sayını artırır və ya azaldır. Adətən, goroutine-lər başlamazdan əvvəl çağırılır.

  • Done() — sayacı 1-ə azaldır, goroutine-in işi bitdikdə çağırılır.

  • Wait() — sayac 0 olana qədər icraatı bloklayır.

İstifadə nümunəsi:

var wg sync.WaitGroup

wg.Add(3) // 3 goroutine gözləyirik

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done() // tamamlandığını bildirir
        fmt.Println("Goroutine", id)
    }(i)
}

wg.Wait() // bütün goroutine-lərin tamamlanmasını gözləyirik
fmt.Println("Bütün goroutine-lər tamamlandı")

Bu şəkildə, WaitGroup paralel icraatı koordine etməyə kömək edir və proqramın erkən bitməsinin qarşısını alır.