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

Применяли ли вы механизм синхронизации с помощью sync.WaitGroup в своих проектах?

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

sobes.tech AI

Да, в проектах на Go часто используется sync.WaitGroup для синхронизации горутин. Этот механизм позволяет ждать завершения группы параллельных задач перед продолжением выполнения.

Принцип работы:

  • Создаётся объект WaitGroup.
  • Перед запуском каждой горутины вызывается Add(1), чтобы увеличить счётчик.
  • Внутри горутины после завершения работы вызывается Done(), уменьшая счётчик.
  • Основная горутина вызывает Wait(), которая блокируется, пока счётчик не станет равен нулю.

Пример:

var wg sync.WaitGroup

wg.Add(2) // ожидаем 2 горутины

go func() {
    defer wg.Done()
    // работа первой горутины
}()

go func() {
    defer wg.Done()
    // работа второй горутины
}()

wg.Wait() // ждём завершения обеих

Это удобно для координации параллельных операций и предотвращения преждевременного завершения программы.