Sobes.tech
Junior — Middle

Կարո՞ղ է ապահով կերպով կարդալ տվյալներ map տվյալների կառուցվածքից առանց սխալների առաջացման վտանգի։

sobes.tech AI

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

Go-ում, քարտեզից ընթերցումը անվտանգ է, եթե այդ պահին ոչ ոք այն չի փոխում: Սակայն, եթե միաժամանակ կատարվում է գրառում (ավելացում, հեռացում կամ փոփոխություն), ընթերցումը կարող է հանգեցնել панիկի (գործարկման սխալի):

Բազմամյա միջավայրում անվտանգ ընթերցման համար սովորաբար օգտագործվում են՝

  • sync.RWMutex — քարտեզը գրելու համար փակել և թույլ տալ միաժամանակյա ընթերցում
  • sync.Map — հատուկ և բազմամյա անվտանգ տվյալների կառուցվածք քարտեզների համար

RWMutex-ի օրինակ՝

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

func read(key string) (int, bool) {
    mu.RLock()
    defer mu.RUnlock()
    val, ok := m[key]
    return val, ok
}

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

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