Junior — Middle
114
Haben Sie den Synchronisationsmechanismus mit sync.WaitGroup in Ihren Projekten verwendet?
Antwort von AI
sobes.tech KI
Да, в проектах на 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() // ждём завершения обеих
Это удобно для координации параллельных операций и предотвращения преждевременного завершения программы.