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