Sobes.tech
Middle

Go'da шарттуу өзгөрмө (sync.Cond) кантип иштейт?

sobes.tech AI

AIден жооп

Go тилинде, sync.Cond — бул шарттуу өзгөрмө, ал goroutine-ларды координациялоо үчүн колдонулат, бир же бир нече goroutine-лар белгилүү бир шарттын ишке ашуусун күтүүгө мүмкүндүк берет.

Негизги ыкмалары:

  • Wait(): учурдагы goroutine-ны токтотуп, байланышкан mutexти бошотуп, Signal() же Broadcast() чакырылгандан кийин кайра улантат.
  • Signal(): шарттуу өзгөрмөдө күтүп жаткан бир goroutine-ны ойготот.
  • Broadcast(): шарттуу өзгөрмөдө күтүп жаткан бардык goroutine-ларды ойготот.

Колдонуу мисалы:

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

// Шартты күтүп жаткан goroutine
ngo func() {
    mu.Lock()
    cond.Wait() // сигналды күтөт
    // шарт аткарылды
    mu.Unlock()
}()

// Сигнал берүүчү goroutine
mu.Lock()
// биринчи goroutine күтүп жаткан абалды өзгөртөт
cond.Signal() // же cond.Broadcast()
mu.Unlock()

Маанилүү, Wait() чакырылганда, mutex жабык болушу керек, жана Wait() чакырылганда, mutex убактылуу бошотулат, башка goroutine-лар абалды өзгөртүп, Signal() же Broadcast() чакыра алышы үчүн. Оянгандан кийин, Wait() кайра mutexти жабат жана кайтарат.

Ошентип, sync.Cond шарттын өзгөрүшүнө негизделген goroutine-лардын иштешин натыйжалуу синхрондоштуруу мүмкүнчүлүгүн берет.