Junior — Middle
Оё имкон дорад бехатариро ҳангоми навиштани ҳамзамон дар Map аз ҷониби чанд ҷараён таъмин кард?
sobes.tech AI
Ҷавоб аз AI
Дар Go стандартӣ харита (map) барои навиштан ҳамзамон аз чанд goroutine бехатар нест. Агар чанд goroutine ҳамзамон дар map нависанд ва синхронӣ накунанд, ин ба паника оварда мерасонад.
Барои таъмини бехатарӣ дар навишти ҳамзамон:
- Мутекси (sync.Mutex ё sync.RWMutex) истифода баред, то дастрасиро ба map ҳимоя кунед.
- Сохторҳои махсуси бехатар барои ҳамзамон истифода, мисли sync.Map, ки барои дастрасии рақобатӣ пешбинӣ шудааст, истифода баред.
Масалан бо мутекс:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Ё истифодаи sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Бинобар ин, барои бехатарии навишти ҳамзамон бояд синхронӣ истифода шавад.