Sobes.tech
Junior — Middle

Comment organiser et gérer la séquence d'exécution des threads?

sobes.tech IA

Réponse de l'IA

En Go, pour organiser et gérer la séquence d'exécution des goroutines, plusieurs mécanismes principaux sont utilisés:

  1. Canaux (channels) — permettent de synchroniser les goroutines, en transférant des données entre elles. Une goroutine qui lit depuis un canal attendra qu'une autre goroutine envoie des données, ce qui garantit l'ordre.

  2. sync.WaitGroup — est utilisé pour attendre la fin d'un groupe de goroutines. Il permet d'attendre que toutes les goroutines lancées se terminent.

  3. Mutex et autres primitives du paquet sync — pour protéger les ressources partagées et éviter les conditions de course.

Exemple d'utilisation des canaux pour une exécution séquentielle:

package main

import (
    "fmt"
)

func worker(id int, done chan bool) {
    fmt.Printf("Travailleur %d démarré\n", id)
    // simulation de travail
    done <- true // signal de fin
}

func main() {
    done := make(chan bool)

    go worker(1, done)
    <-done // attendre la fin du travailleur 1

    go worker(2, done)
    <-done // attendre la fin du travailleur 2

    fmt.Println("Tous les travailleurs ont terminé")
}

Ainsi, en utilisant des canaux et la synchronisation, on peut gérer l'ordre d'exécution des goroutines.