Назад к вопросам
Junior — Middle
83
Можно ли в Go менять количество ожидающих в синхронизирующей группе WaitGroup во время выполнения программы?
Компании, где спрашивали
Betera Group
Ответ от нейросети
sobes.tech AI
В Go количество ожидающих в sync.WaitGroup можно изменять во время выполнения программы с помощью методов Add, Done и Wait.
- Метод
Add(n int)увеличивает или уменьшает счётчик ожидающих горутин наn. Можно вызывать несколько раз, чтобы динамически менять количество ожидающих. - Метод
Done()эквивалентенAdd(-1), уменьшает счётчик на 1. - Метод
Wait()блокирует выполнение до тех пор, пока счётчик не станет равен нулю.
Важно: нельзя вызвать Add с отрицательным значением, если счётчик уже равен нулю, иначе будет паника.
Пример:
var wg sync.WaitGroup
wg.Add(2) // ожидаем 2 горутины
go func() {
defer wg.Done()
// работа 1
}()
go func() {
defer wg.Done()
// работа 2
}()
// В процессе можно добавить ещё ожидания
wg.Add(1)
go func() {
defer wg.Done()
// дополнительная работа
}()
wg.Wait() // ждём завершения всех
Таким образом, количество ожидающих в WaitGroup можно менять динамически, главное — соблюдать корректность вызовов Add и Done.