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.Addwg.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.Addwg.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.