Sobes.tech
Junior — Middle

Ինչպես ապահովել անվտանգ մուտք դեպի քարտը բազմատողային միջավայրում?

sobes.tech AI

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

Go լեզվում, բազմատողային միջավայրում անվտանգ մուտք գործելու համար քարտեզին (map), անհրաժեշտ է օգտագործել սինխրոնիզացիա, քանի որ map-ը չի հանդիսանում տողային անվտանգ տվյալների կառուցվածք: Ամենատարածված միջոցը մյուտեքս (sync.Mutex կամ sync.RWMutex) օգտագործելն է՝ մուտքը փակելու համար ընթերցման և գրելու ժամանակ:

Օրինակ sync.RWMutex-ով:

import (
    "sync"
)

var (
    m = make(map[string]int)
    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
}

Նույնպես, Go-ում կա sync.Map տիպը, որը իրականացնում է տողային անվտանգ քարտեզ՝ օպտիմիզացմամբ հաճախակի ընթերցումների համար: Կարող եք օգտագործել, եթե չպահանջվում է խիստ տիպավորություն և պարզություն:

import "sync"

var m sync.Map

m.Store("key", 42)          // գրառում
value, ok := m.Load("key")  // ընթերցում

Այսպիսով, բազմատողային միջավայրում անվտանգ մուտք գործելու համար օգտագործեք mutex-ներ կամ sync.Map։