Sobes.tech
Junior — Middle

Expliquez le principe de fonctionnement du mécanisme de synchronisation des goroutines dans le contexte de l'exécution concurrente des tâches.

sobes.tech IA

Réponse de l'IA

En Go, les goroutines sont des threads légers qui s'exécutent de manière concurrente. Pour synchroniser les goroutines, on utilise des mécanismes permettant de coordonner l'accès aux ressources partagées et d'organiser l'exécution.

Principaux mécanismes de synchronisation :

  • Canaux (channels) : permettent de transmettre des données entre goroutines, en assurant la synchronisation via l'échange de messages.
  • Mutex (sync.Mutex) : bloquent l'accès aux données partagées pour éviter les conditions de course.
  • WaitGroup (sync.WaitGroup) : permet d'attendre la fin d'un groupe de goroutines.

Exemple avec un canal :

package main

import (
    "fmt"
)

func worker(ch chan int) {
    val := <-ch // attend des données du canal
    fmt.Println("Valeur reçue :", val)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    ch <- 42 // envoie des données dans le canal
}

Ici, le canal assure la synchronisation : la goroutine worker attend que main envoie une valeur.