Junior
Como na linguagem de programação (Go) detectar que todas as goroutines em execução terminaram e que o thread principal pode usar os resultados?
sobes.tech IA
Resposta da IA
Em Go, para acompanhar a conclusão de todas as goroutines em execução, geralmente usa-se o tipo sync.WaitGroup. Ele permite que o thread principal aguarde até que todas as goroutines terminem a execução.
Exemplo de uso:
var wg sync.WaitGroup
wg.Add(3) // esperamos 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // sinaliza a conclusão da goroutine
// trabalho da goroutine
fmt.Println("Goroutine", id, "concluída")
}(i)
}
wg.Wait() // o thread principal fica bloqueado até que o contador de wg chegue a 0
fmt.Println("Todas as goroutines concluídas, resultados podem ser utilizados")
Dessa forma, WaitGroup permite sincronizar a execução e garantir que o thread controlador aguarde a conclusão de todas as tarefas paralelas.