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-лардын иштешин натыйжалуу синхрондоштуруу мүмкүнчүлүгүн берет.