Sobes.tech
Назад к вопросам
Junior — Middle
80

Какие последствия возникнут, если количество вызовов wg.Add не соответствует числу запущенных горутин?

Компании, где спрашивали
Кредиска

Ответ от нейросети

sobes.tech AI

В Go sync.WaitGroup используется для ожидания завершения набора горутин. Метод wg.Add(n) увеличивает счётчик на n, а wg.Done() уменьшает его на 1. Если количество вызовов wg.Add не соответствует числу запущенных горутин (то есть вызовов wg.Done), то:

  • Если wg.Add меньше, чем количество wg.Done, то при вызове wg.Done счётчик может стать отрицательным, что приведёт к панике (runtime panic).
  • Если wg.Add больше, чем количество wg.Done, то вызов wg.Wait() будет блокироваться навсегда, так как счётчик не достигнет нуля — это приведёт к дедлоку.

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