Sobes.tech
Intern

Агар ҳисобкунаки sync.WaitGroup ба сабаби даъватҳои иловагӣ ба Done нисбат ба Add манфӣ шавад, чӣ мешавад؟

sobes.tech AI

Ҷавоб аз AI

Агар د حسابگر sync.WaitGroup په Go کې منفي شي ځکه چې د Done() غوښتنې د Add() څخه زیاتې شي، نو په وخت کې به پانیک (panic) رامنځته شي.

WaitGroup د تمه شوې goroutines شمېر د حسابګر له لارې تعقیبوي. کله چې Add(n) غوښتنه وشي، حسابګر د n سره زیاتېږي، او کله چې Done() وشي — د 1 سره کمېږي. که حسابګر منفي شي، دا د کارونې تېروتنه ګڼل کېږي.

د تېروتنې مثال:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // اضافي غوښتنه، پانیک به راشي

پانیک د لاندې پیغام سره څرګندیږي:

panic: sync: negative WaitGroup counter

له همدې امله، مهمه ده چې د Add او Done ترمنځ سخت توازن وساتل شي ترڅو دا تېروتنه مخنیوی وشي.