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:
-
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.
-
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.
-
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.