Ներկայացրեք, թե ինչ է պայմանական փոփոխականը և ինչպես է այն օգտագործվում թելերի սինխրոնիզացման համար։
sobes.tech AI
Պատասխան AI-ից
Շর্তային փոփոխականը (condition variable) մի մեխանիզմ է սինխրոնիզացիայի համար, որը թույլ է տալիս մեկ կամ մի քանի թելերի սպասել որոշակի պայմանի կատարմանը, մինչդեռ մյուս թելը նրանց տեղեկացնում է վիճակի փոփոխության մասին:
Go-ում, պայմանական փոփոխականները իրականացվում են sync.Cond տիպի միջոցով: Այն աշխատում է միասին մյուտեքսի (sync.Mutex) հետ, որը պաշտպանում է ընդհանուր տվյալները: Սպասող թելը կանչում է Wait(), որը ազատում է մյուտեքսը և բլոկվում մինչև որ մյուս թելը կանչի Signal() (մեկ թելին վերարթնացնելու համար) կամ Broadcast() (բոլոր սպասողներին վերարթնացնելու համար):
Օգտագործման օրինակ:
var mu sync.Mutex
cond := sync.NewCond(&mu)
sharedDataReady := false
// Սպասող թելը
mu.Lock()
for !sharedDataReady {
cond.Wait() // ազատում է mu և սպասում սիգնալին
}
// Այստեղ sharedDataReady == true
mu.Unlock()
// Փոփոխություն կատարող թելը
mu.Lock()
sharedDataReady = true
cond.Signal() // կամ cond.Broadcast(), սպասողներին վերարթնացնելու համար
mu.Unlock()
Այսպիսով, պայմանական փոփոխականը օգնում է կազմակերպել ճիշտ սպասում և տեղեկացումներ թելերի միջև, խուսափելով ակտիվ պոլինգից և մրցակցության պայմաններից։