Назад к вопросам
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 ровно столько раз, сколько было добавлено.