Junior — Middle
Արդյոք հնարավոր է միաժամանակ կիրառել մի քանի մութեքս մեխանիզմներ մեկ ֆունկցիայում?
sobes.tech AI
Պատասխան AI-ից
Այո, Go լեզվում հնարավոր է միաժամանակ օգտագործել մի քանի mutex (Mutex) նույն ֆունկցիայում։ Սա հաճախ է հանդիպում, երբ անհրաժեշտ է պաշտպանել տարբեր ռեսուրսներ կամ տվյալների մասեր, որոնք չեն կապված միմյանց հետ։ Հիմնականը՝ խուսափել փոխադարձ բլոկավորումներից (deadlock), երբ մեկ mutex սպասում է մյուսի ազատմանը, իսկ մյուսը՝ առաջինի։
Մի քանի mutex-ների օգտագործման օրինակ՝
var mu1 sync.Mutex
var mu2 sync.Mutex
func updateResources() {
mu1.Lock()
defer mu1.Unlock()
// Աշխատանք առաջին ռեսուրսի հետ
mu2.Lock()
defer mu2.Unlock()
// Աշխատանք երկրորդ ռեսուրսի հետ
}
Deadlock-ներից խուսափելու համար խորհուրդ է տրվում միշտ mutex-ները փակել նույն հերթականությամբ բոլոր կոդի վայրերում։