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")