Sobes.tech
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-ները փակել նույն հերթականությամբ բոլոր կոդի վայրերում։