Sobes.tech
Junior — Middle

Ներկայացրեք, թե ինչ է պայմանական փոփոխականը և ինչպես է այն օգտագործվում թելերի սինխրոնիզացման համար։

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()

Այսպիսով, պայմանական փոփոխականը օգնում է կազմակերպել ճիշտ սպասում և տեղեկացումներ թելերի միջև, խուսափելով ակտիվ պոլինգից և մրցակցության պայմաններից։