Sobes.tech
Junior — Middle

Comment implémenter une attente synchrone de la fin de plusieurs tâches parallèles dans un programme en Go?

sobes.tech IA

Réponse de l'IA

En Go, pour attendre de manière synchrone la fin de plusieurs tâches parallèles, on utilise généralement sync.WaitGroup. Cela permet de lancer plusieurs goroutines et d’attendre leur achèvement.

Exemple:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done() // Informer le WaitGroup que la tâche est terminée
    fmt.Printf("Travailleur %d démarré\n", id)
    // simulation de travail
    // time.Sleep(time.Second)
    fmt.Printf("Travailleur %d terminé\n", id)
}

func main() {
    var wg sync.WaitGroup
    numWorkers := 3

    wg.Add(numWorkers) // Définir le nombre de tâches

    for i := 1; i <= numWorkers; i++ {
        go worker(i, &wg)
    }

    wg.Wait() // Attendre la fin de toutes les goroutines
    fmt.Println("Tous les travailleurs ont terminé")
}

Ainsi, WaitGroup permet de synchroniser efficacement l’exécution de tâches parallèles.