Назад к вопросам
Junior
24
Как в языке программирования (Go) отследить, что все запущенные потоки завершили работу и управляющий поток может воспользоваться результатами?
Компании, где спрашивали
.wrk
Ответ от нейросети
sobes.tech AI
В Go для отслеживания завершения всех запущенных горутин обычно используют тип sync.WaitGroup. Он позволяет основному потоку ждать, пока все горутины закончат выполнение.
Пример использования:
var wg sync.WaitGroup
wg.Add(3) // ожидаем 3 горутины
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // сигнализируем о завершении горутины
// работа горутины
fmt.Println("Горутина", id, "завершена")
}(i)
}
wg.Wait() // основной поток блокируется, пока wg счетчик не станет 0
fmt.Println("Все горутины завершены, можно использовать результаты")
Таким образом, WaitGroup позволяет синхронизировать выполнение и гарантировать, что управляющий поток дождется завершения всех параллельных задач.