Intern
თუ sync.WaitGroup-ის გამოთვლილი ნიშანი უარყოფითია, რადგან Done-ის დამატებითი გამოძახილები შედარებით Add-ის, რა მოხდება?
sobes.tech AI
პასუხი AI-სგან
თუ sync.WaitGroup-ის გამყენებელი Go-ში უარყოფითია, რადგან Done()-ის ზარები Add()-ზე მეტია, მაშინ შესრულების დროს მოხდება პანიკა (panic).
WaitGroup აკონტროლებს ელოდებოდ goroutine-ების რაოდენობას გამოთვლით. როდესაც გამოიძახება Add(n), გამოთვლელი იზრდება n-ით, ხოლო როდესაც Done() — მცირდება 1-ით. თუ გამოთვლელი გახდება ნული ან ნაკლები, ეს ითვლება გამოყენების შეცდომად.
შეცდომის მაგალითი:
var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // დამატებითი გამოძახება, გამოიწვევს panic-ს
პანიკა გამოჩნდება შემდეგ შეტყობინებასთან:
panic: sync: negative WaitGroup counter
ამიტომ მნიშვნელოვანია მკაცრად შეინარჩუნოს ბალანსი Add და Done-ს შორის, რათა თავიდან აიცილოს ეს შეცდომა.