Sobes.tech
Junior — Middle

თუ wg.Add-ის ზარის რაოდენობა არ ემთხვევა ამუშავებული goroutine-ების რაოდენობას, რა შედეგები შეიძლება მოჰყვეს?

sobes.tech AI

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

Go tilində, sync.WaitGroup bir qrup goroutine-in tamamlanmasını gözləmək üçün istifadə olunur. wg.Add(n) metodu sayğacı n-ə artırır, və wg.Done() onu 1-ə azaldır. Əgər wg.Add çağırışlarının sayı işə salınmış goroutine-lərin sayına (yəni, wg.Done çağırışlarına) uyğun gəlməzsə,:

  • Əgər wg.Add wg.Done-dan azdırsa, wg.Done çağırıldıqda sayğac mənfi ola bilər, bu isə runtime panic-ə səbəb olar.
  • Əgər wg.Add wg.Done-dan çoxdursa, wg.Wait() heç vaxt bloklanacaq, çünki sayğac sıfıra çatmayacaq — bu deadlock-ə səbəb olar.

Bu səbəbdən, goroutine-ləri işə salmadan əvvəl wg.Add-ni düzgün sayda çağırmaq və wg.Done-nu tam olaraq əlavə edilən say qədər çağırmaq vacibdir.