Sobes.tech
Junior — Middle

Meg tudná magyarázni, hogy mi az a sync.Cond feltételes változó a Go nyelvben, és mire használják?

sobes.tech MI

Válasz az MI-től

A Go nyelvben a sync.Cond egy olyan szerkezet, amely egy feltételes változót valósít meg, és a goroutine-ok szinkronizálására szolgál. Lehetővé teszi egy vagy több goroutine számára, hogy várakozzanak egy adott feltétel teljesülésére, és értesítsék a többi goroutine-ot arról, hogy ez a feltétel megváltozott.

A sync.Cond főbb metódusai:

  • Wait() — blokkolja az aktuális goroutine-ot, amíg egy másik goroutine nem hívja meg a Signal() vagy Broadcast()-ot.
  • Signal() — felébreszt egy goroutine-t, amely várakozik a feltételes változón.
  • Broadcast() — felébreszti az összes goroutine-t, amely várakozik a feltételes változón.

Használati példa:

var mu sync.Mutex
cond := sync.NewCond(&mu)

// Goroutine, amely vár egy jelzésre
go func() {
    mu.Lock()
    cond.Wait() // vár a jelzésre
    // az ébresztés után végrehajtja a műveleteket
    mu.Unlock()
}()

// Goroutine, amely küldi a jelet
mu.Lock()
cond.Signal() // felébreszt egy goroutine-t
mu.Unlock()

Így a sync.Cond segít több goroutine munkájának koordinálásában, amelyek bizonyos feltételek teljesülését várják.