Explique ce qu'est une variable conditionnelle et comment elle est utilisée pour synchroniser les threads.
sobes.tech IA
Réponse de l'IA
Une variable de condition (condition variable) est un mécanisme de synchronisation des threads qui permet à un ou plusieurs threads d’attendre qu’une certaine condition se réalise, pendant qu’un autre thread les notifie d’un changement d’état.
En Go, les variables de condition sont implémentées via le type sync.Cond. Elle fonctionne avec un mutex (sync.Mutex), qui protège les données partagées. Le thread qui souhaite attendre appelle Wait(), ce qui libère le mutex et bloque jusqu’à ce qu’un autre thread appelle Signal() (pour réveiller un thread) ou Broadcast() (pour réveiller tous ceux qui attendent).
Exemple d’utilisation :
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Thread qui attend
mu.Lock()
for !sharedDataReady {
cond.Wait() // libère mu et attend le signal
}
// Ici sharedDataReady == true
mu.Unlock()
// Thread qui modifie l’état
mu.Lock()
sharedDataReady = true
cond.Signal() // ou cond.Broadcast(), pour réveiller les attendants
mu.Unlock()
Ainsi, la variable de condition aide à organiser une attente et une notification correctes entre threads, évitant la sonde active et les conditions de course.