Middle
Jak funguje podmíněná proměnná (sync.Cond) v Go?
sobes.tech AI
Odpověď od AI
V jazyce Go je sync.Cond podmíněná proměnná, která se používá k koordinaci gorutin, umožňující jedné nebo více gorutinám čekat na splnění určité podmínky.
Hlavní metody:
Wait(): blokuje aktuální gorutinu a uvolní přidružený mutex, dokud není zavolánoSignal()neboBroadcast().Signal(): probudí jednu gorutinu čekající na podmíněné proměnné.Broadcast(): probudí všechny gorutiny čekající na podmíněné proměnné.
Příklad použití:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Gorutina čekající na podmínku
go func() {
mu.Lock()
cond.Wait() // čeká na signál
// podmínka je splněna
mu.Unlock()
}()
// Gorutina, která signalizuje
mu.Lock()
// mění stav, na který čeká první gorutina
cond.Signal() // nebo cond.Broadcast()
mu.Unlock()
Je důležité, aby Wait() bylo voláno s uzamčeným mutexem, a při volání Wait() je mutex dočasně uvolněn, aby jiné gorutiny mohly změnit stav a zavolat Signal() nebo Broadcast(). Po probuzení Wait() znovu uzamkne mutex před návratem.
Tímto způsobem umožňuje sync.Cond efektivně synchronizovat provádění gorutin na základě změn stavu.