Junior — Middle
Може ли безопасно да се използват споделени ресурси като Map при едновременен достъп от няколко горутини?
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")