Magyarázza el, mi az a feltételes változó, és hogyan használják a szálak szinkronizálására.
sobes.tech MI
Válasz az MI-től
A feltételváltozó (condition variable) egy szálak közötti szinkronizációs mechanizmus, amely lehetővé teszi egy vagy több szálnak, hogy egy adott feltétel bekövetkeztéig várakozzanak, miközben egy másik szál értesíti őket az állapotváltozásról.
Go-ban a feltételváltozókat a sync.Cond típus valósítja meg. Ez egy sync.Mutex-szel együtt működik, amely védi a megosztott adatokat. A várakozó szál a Wait()-ot hívja, ami felszabadítja a mutexet és blokkolódik, amíg egy másik szál nem hívja a Signal()-t (egy szál felébresztésére) vagy a Broadcast()-ot (minden várakozó felébresztése).
Használati példa:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Várakozó szál
mu.Lock()
for !sharedDataReady {
cond.Wait() // felszabadítja a mu-t és vár a jelre
}
// Itt sharedDataReady == true
mu.Unlock()
// Állapotot módosító szál
mu.Lock()
sharedDataReady = true
cond.Signal() // vagy cond.Broadcast(), hogy felébressze a várakozókat
mu.Unlock()
Így a feltételváltozó segít a helyes várakozás és értesítés szervezésében a szálak között, elkerülve az aktív pollingot és a versenyhelyzeteket.