Sobes.tech
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-ს შორის, რათა თავიდან აიცილოს ეს შეცდომა.