Middle
Kaip veikia sąlyginė kintamoji (sync.Cond) Go?
sobes.tech AI
Atsakymas iš AI
Go kalboje, sync.Cond yra sąlyginė kintamoji, naudojama gorutinių koordinavimui, leidžianti vienai ar kelioms gorutinoms laukti tam tikro sąlygos įvykdymo.
Pagrindiniai metodai:
Wait(): blokuoja esamą gorutina ir atlaisvina susijusį mutex, kol bus iškviestasSignal()arbaBroadcast().Signal(): pažadina vieną gorutina, kuri laukia sąlyginėje kintamojoje.Broadcast(): pažadina visas gorutinas, kurios laukia sąlyginėje kintamojoje.
Naudojimo pavyzdys:
var mu sync.Mutex
cond := sync.NewCond(&mu)
// Gorutina, kuri laukia sąlygos
ngo func() {
mu.Lock()
cond.Wait() // laukia signalo
// sąlyga įvykdyta
mu.Unlock()
}()
// Gorutina, kuri siunčia signalą
mu.Lock()
// keičia būseną, kurios laukė pirmoji gorutina
cond.Signal() // arba cond.Broadcast()
mu.Unlock()
Svarbu, kad Wait() būtų iškviesta su užrakintu mutex, ir Wait() metu mutex laikinai atlaisvinamas, kad kitos gorutinos galėtų keisti būseną ir iškviesti Signal() arba Broadcast(). Po pabudimo, Wait() vėl užrakina mutex ir grįžta.
Taip, sync.Cond leidžia efektyviai sinchronizuoti gorutinių vykdymą pagal būsenos pokyčius.