Junior — Middle
Vysvětlete, co je podmíněná proměnná a jak se používá k synchronizaci vláken.
sobes.tech AI
Odpověď od AI
Podmínková proměnná (condition variable) je mechanismus synchronizace vláken, který umožňuje jednomu nebo více vláknům čekat na splnění určité podmínky, zatímco jiné vlákno je o této změně informuje.
V Go jsou podmínkové proměnné implementovány pomocí typu sync.Cond. Funguje spolu s mutexem (sync.Mutex), který chrání sdílená data. Vlákno, které chce čekat, volá Wait(), čímž uvolní mutex a zablokuje se, dokud jiné vlákno nevolá Signal() (pro probuzení jednoho vlákna) nebo Broadcast() (pro probuzení všech čekajících).
Příklad použití:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Vlákno čekající
mu.Lock()
for !sharedDataReady {
cond.Wait() // uvolní mu a čeká na signál
}
// Zde je sharedDataReady == true
mu.Unlock()
// Vlákno, které mění stav
mu.Lock()
sharedDataReady = true
cond.Signal() // nebo cond.Broadcast(), pro probuzení čekajících
mu.Unlock()
Tímto způsobem pomáhá podmínková proměnná organizovat správné čekání a oznámení mezi vlákny, čímž se předchází aktivnímu pollingu a závodním podmínkám.