Sobes.tech
Intern
37

Егер sync.WaitGroup санауышы Add-қа салыстырғанда Done-ға артық шақырулардан кейін теріс мәнге айналса, не болады?

Сұралған компаниялар
AvitoAvito

AI-дан жауап

sobes.tech AI

Если у sync.WaitGroup в Go счётчик становится отрицательным из-за того, что вызовов Done() больше, чем Add(), то в рантайме произойдёт паника (panic).

WaitGroup отслеживает количество ожидаемых горутин через счётчик. При вызове Add(n) счётчик увеличивается на n, при Done() — уменьшается на 1. Если счётчик становится меньше нуля, это считается ошибкой использования.

Пример ошибки:

var wg sync.WaitGroup
wg.Add(1)
wg.Done()
wg.Done() // лишний вызов, приведёт к panic

Паника возникает с сообщением:

panic: sync: negative WaitGroup counter

Поэтому важно строго соблюдать баланс между Add и Done, чтобы избежать этой ошибки.