Junior — Middle
¿Cómo implementar una espera sincrónica para la finalización de varias tareas paralelas en un programa en Go?
sobes.tech AI
Respuesta de la IA
En Go, para esperar de manera sincrónica la finalización de varias tareas paralelas, generalmente se utiliza sync.WaitGroup. Esto permite lanzar varias goroutines y esperar a que terminen.
Ejemplo:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Informar al WaitGroup que la tarea ha finalizado
fmt.Printf("Trabajador %d iniciado\n", id)
// simulación de trabajo
// time.Sleep(time.Second)
fmt.Printf("Trabajador %d terminado\n", id)
}
func main() {
var wg sync.WaitGroup
numWorkers := 3
wg.Add(numWorkers) // Establecer el número de tareas
for i := 1; i <= numWorkers; i++ {
go worker(i, &wg)
}
wg.Wait() // Esperar a que todas las goroutines terminen
fmt.Println("Todos los trabajadores han terminado")
}
De esta forma, WaitGroup permite sincronizar eficazmente la ejecución de tareas paralelas.