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.