Sobes.tech
Back to questions
Junior — Middle
89

Можете объяснить, как реализована синхронизация с помощью Wait Group в Go?

Companies where asked
WildberriesWildberries
СБЕРСБЕР

Answer from AI

sobes.tech AI

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

Основные методы:

  • Add(int) — увеличивает счетчик ожидаемых горутин.
  • Done() — уменьшает счетчик, вызывается по завершении горутины.
  • Wait() — блокирует выполнение до тех пор, пока счетчик не станет равен нулю.

Пример:

var wg sync.WaitGroup

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

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

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

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

Таким образом, WaitGroup позволяет эффективно синхронизировать выполнение нескольких параллельных задач, не используя сложные механизмы блокировок.