Sobes.tech
Junior — Middle
108

Жобаларыңызда sync.WaitGroup көмегімен синхрондау механизмін қолдандыңыз ба?

AI-дан жауап

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() // ждём завершения обеих

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