Spiega cos'è una variabile condizionale e come viene utilizzata per sincronizzare i thread.
sobes.tech AI
Risposta dell'AI
La variabile di condizione (condition variable) è un meccanismo di sincronizzazione dei thread che permette a uno o più thread di attendere che si verifichi una condizione specifica, mentre un altro thread li notifica di un cambiamento di stato.
In Go, le variabili di condizione sono implementate tramite il tipo sync.Cond. Funziona insieme a un mutex (sync.Mutex), che protegge i dati condivisi. Il thread che desidera attendere chiama Wait(), rilasciando il mutex e bloccandosi fino a quando un altro thread chiama Signal() (per svegliare un thread) o Broadcast() (per svegliare tutti quelli in attesa).
Esempio di utilizzo:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Thread in attesa
mu.Lock()
for !sharedDataReady {
cond.Wait() // rilascia mu e attende il segnale
}
// Qui sharedDataReady == true
mu.Unlock()
// Thread che modifica lo stato
mu.Lock()
sharedDataReady = true
cond.Signal() // o cond.Broadcast(), per svegliare gli in attesa
mu.Unlock()
In questo modo, la variabile di condizione aiuta a organizzare un’attesa e una notifica corrette tra thread, evitando polling attivo e condizioni di race.