Sobes.tech
Junior — Middle

Ինչպե՞ս է գործում ծրագիրը, եթե միաժամանակ կատարվում է մրցակցային ընթերցում արժեքներից քարտեզից։

sobes.tech AI

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

Go լեզվում, միաժամանակյա անվտանգ ընթերցումը քարտեզից չի առաջացնում панիկ կամ սխալներ: Խնդրերը առաջանում են, եթե միաժամանակ կատարվում է գրառում կամ ընթերցում և գրառում: Եթե ծրագրում միայն մի քանի goroutine ընթերցում են արժեքները քարտեզից առանց փոփոխելու, դա անվտանգ է: Բայց եթե առնվազն մեկ goroutine փոփոխում է քարտեզը, անհրաժեշտ է օգտագործել սինխրոնիզացիոն մեխանիզմներ, օրինակ՝ sync.RWMutex կամ sync.Map:

Անվտանգ ընթերցման օրինակ՝ օգտագործելով sync.RWMutex:

var m = make(map[string]int)
var mu sync.RWMutex

func read(key string) int {
    mu.RLock()
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()
    defer mu.Unlock()
    m[key] = value
}

Այսպիսով, միաժամանակյա ընթերցումը առանց գրառման անվտանգ է, բայց գրառման դեպքում անհրաժեշտ է սինխրոնիզացիա։