Sobes.tech
Junior — Middle

როგორ შეიძლება გარანტირებული იყოს ყველა დაწყებული გორუტინის დასრულება პროგრამაში?

sobes.tech AI

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

Go dilində xaricdən zorla goroutine-i sonlandırmanın daxili bir yolu yoxdur. Bütün işləyən goroutine-lərin tamamlanmasını təmin etmək üçün adətən sync.WaitGroup ilə sinxronizasiya istifadə olunur.

İş prinsipi:

  • Hər bir goroutine başlamazdan əvvəl wg.Add(1) çağırılır.
  • Goroutine sonunda wg.Done() çağırılır.
  • Əsas funksiyada wg.Wait() çağırılır, bu da icraatı bloklayır, sayğac sıfıra çatana qədər.

Nümunə:

var wg sync.WaitGroup

wg.Add(1)
go func() {
    defer wg.Done()
    // goroutine işi
}()

wg.Wait() // bütün goroutine-lərin tamamlanmasını gözləyin

Bu şəkildə, proqram bütün goroutine-lərin tamamlanmasını təmin edir və davam edir və ya bitir.