Sobes.tech
Назад к вопросам
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 позволяет синхронизировать выполнение и гарантировать, что управляющий поток дождется завершения всех параллельных задач.