Middle
Hogyan működik a feltételes változó (sync.Cond) Go-ban?
sobes.tech MI
Válasz az MI-től
Go nyelvben a sync.Cond egy feltételes változó, amelyet goroutine-ok koordinálására használnak, lehetővé téve egy vagy több goroutine számára, hogy várakozzanak egy adott feltétel bekövetkezésére.
Főbb módszerek:
Wait(): blokkolja az aktuális goroutine-t és felszabadítja a kapcsolódó mutexet, amígSignal()vagyBroadcast()nem kerül meghívásra.Signal(): felébreszt egy goroutine-t, amely a feltételes változón várakozik.Broadcast(): felébreszti az összes goroutine-t, amely a feltételes változón várakozik.
Használati példa:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Goroutine, amely vár a feltételre
go func() {
mu.Lock()
cond.Wait() // vár a jelzésre
// a feltétel teljesült
mu.Unlock()
}()
// Goroutine, amely jelzést küld
mu.Lock()
// megváltoztatja az állapotot, amit az első goroutine vár
cond.Signal() // vagy cond.Broadcast()
mu.Unlock()
Fontos, hogy a Wait() hívás mutexzárva legyen, és a Wait() hívásakor a mutex ideiglenesen felszabadul, hogy más goroutine-ok megváltoztathassák az állapotot és hívhassák a Signal() vagy Broadcast() metódusokat. A felébredés után a Wait() újra zárolja a mutexet, mielőtt visszatérne.
Így a sync.Cond hatékonyan szinkronizálja a goroutine-ok végrehajtását az állapotváltozások alapján.