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
}
Այսպիսով, անվտանգ ընթերցումը հնարավոր է, եթե ապահովվի գրառման սինխրոնիզացիան։