Sobes.tech
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)
}

Бинобар ин, барои бехатарии навишти ҳамзамон бояд синхронӣ истифода шавад.