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