Sobes.tech
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áno Signal() nebo Broadcast().
  • 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.