Sobes.tech
Middle — Middle+

Оё имкон дорад, ки дар муҳити бисёртарифӣ навиштан ба контейнери map бехатар бошад бе ҳамоҳангсозии иловагӣ?

sobes.tech AI

Ҷавоб аз AI

Дар Go, харитаи стандартӣ (map) барои навиштан дар муҳити бисёрсоҳавӣ бехатар нест. Агар чанд goroutine ҳамзамон дар map нависанд бе ҳамоҳангсозӣ, ин ба ҳолатҳои рақобат ва паника дар вақти иҷро оварда мерасонад.

Барои навиштани бехатар дар map дар муҳити бисёрсоҳавӣ, бояд истифода бурд:

  • sync.Mutex ё sync.RWMutex барои бастани дастрасӣ;
  • sync.Map, иҷрои бехатари map аз китобхонаи стандартӣ.

Масалан бо sync.Mutex:

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

func safeWrite(key string, value int) {
    mu.Lock()
    m[key] = value
    mu.Unlock()
}

Бе чунин ҳамоҳангсозӣ, навиштан ба map бехатар нест.