Middle
Ինչպես է աշխատում պայմանական փոփոխականը (sync.Cond) Go-ում?
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-ների կատարումը վիճակի փոփոխությունների հիման վրա։