// реализовать кастомную WaitGroup

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

// реализовать кастомную WaitGroup

type WaitGroup struct { }

func NewWaitGroup() *WaitGroup { }

func (wg *WaitGroup) Add(delta int) { }

func (wg *WaitGroup) Done() { }

func (wg *WaitGroup) Wait() { }

Ответ

В 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 позволяет эффективно синхронизировать выполнение нескольких параллельных задач, не используя сложные механизмы блокировок.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку