Junior
Как в езика за програмиране (Go) да проследим, че всички изпълнявани потоци са приключили и управляващият поток може да използва резултатите?
sobes.tech AI
Отговор от 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 позволява синхронизиране на изпълнението и гарантира, че контролният поток ще изчака завършването на всички паралелни задачи.