Sobes.tech
Junior — Middle

Explică ce este o variabilă condițională și cum este utilizată pentru sincronizarea firelor.

sobes.tech AI

Răspuns de la AI

Variabila condiției (condition variable) este un mecanism de sincronizare a firelor de execuție care permite unuia sau mai multor fire să aștepte apariția unei anumite condiții, în timp ce alt fir le notifică despre o schimbare de stare.

În Go, variabilele condiționale sunt implementate prin tipul sync.Cond. Acesta funcționează împreună cu un mutex (sync.Mutex), care protejează datele partajate. Firul care dorește să aștepte apelează Wait(), eliberând mutex-ul și blocându-se până când alt fir apelează Signal() (pentru a trezi un fir) sau Broadcast() (pentru a trezi toți cei în așteptare).

Exemplu de utilizare:

var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false

// Firul care așteaptă
mu.Lock()
for !sharedDataReady {
    cond.Wait() // eliberează mu și așteaptă semnalul
}
// Aici sharedDataReady == true
mu.Unlock()

// Firul care schimbă starea
mu.Lock()
sharedDataReady = true
cond.Signal() // sau cond.Broadcast(), pentru a trezi cei în așteptare
mu.Unlock()

Astfel, variabila condițională ajută la organizarea corectă a așteptării și notificării între fire, evitând sondajul activ și condițiile de cursă.