Sobes.tech
Junior — Middle

Оё истифодаи бехатар аз захираҳои умумӣ мисли Map дар ҳоле ки ба онҳо аз чанд goroutine ҳамзамон дастрасӣ мешавад, имконпазир аст?

sobes.tech AI

Ҷавоб аз AI

Не, стандартната карта (map) в Go не е безопасна за използване от множество горутини и не може да се използва едновременно от няколко горутини без допълнителна синхронизация. Без защита може да възникне състезание и паника.

За безопасно използване на споделени ресурси като карти в многонишково среди, можете:

  • Да използвате sync.Mutex или sync.RWMutex за защита на достъпа до картата.
  • Да използвате sync.Map, специализирана и безопасна за нишки структура за данни за карти.

Пример с mutex:

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

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

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}

Използване на sync.Map:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")