Sobes.tech
Junior — Middle

Ի՞նչ տեսակների փոխադարձ բացառումներ (Mutex) են իրականացված Go-ի ստանդարտ գրադարանում։

sobes.tech AI

Պատասխան AI-ից

Go-ի ստանդարտ գրադարանում իրականացված է հիմնական փոխադարձ բացառության տեսակ՝ sync.Mutex: Սա պարզ մյուտեքս է, որը ապահովում է փակել և բացել՝ կոդի քննադատական հատվածները միաժամանակյա մուտքից պաշտպանելու համար:

Բացի այդ, կա sync.RWMutex — մյուտեքսի ընդլայնված տարբերակ, որը թույլ է տալիս միաժամանակ մի քանի ընթերցողներին պահել փակումը, բայց գրառումը բացառիկորեն արգելվում է:

sync.Mutex օգտագործման օրինակ՝

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()
    defer mu.Unlock()
    counter++
}

Եվ օրինակ sync.RWMutex-ով՝

var rwMu sync.RWMutex
var data int

func readData() int {
    rwMu.RLock()
    defer rwMu.RUnlock()
    return data
}

func writeData(val int) {
    rwMu.Lock()
    defer rwMu.Unlock()
    data = val
}