Sobes.tech
Назад к вопросам
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.