Sobes.tech
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.