Sobes.tech
Back to questions
Intern
3

Что произойдёт, если у sync.WaitGroup счётчик станет отрицательным из-за лишних вызовов Done по сравнению с Add?

Companies where asked
AvitoAvito

Answer from 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, чтобы избежать этой ошибки.