Назад к вопросам
Avito
Intern
4
Что произойдёт, если у sync.WaitGroup счётчик станет отрицательным из-за лишних вызовов Done по сравнению с Add?
Компании, где спрашивали
Ответ от нейросети
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, чтобы избежать этой ошибки.