Back to questions
Junior — Middle
87
Можно ли безопасно использовать общие ресурсы типа Map при одновременном доступе из нескольких горутин?
Companies where asked
HyperRus
Answer from AI
sobes.tech AI
Нет, стандартная карта (map) в Go не является потокобезопасной и не может использоваться одновременно из нескольких горутин без дополнительной синхронизации. При одновременном доступе без защиты может возникнуть гонка данных и паника.
Для безопасного использования общих ресурсов типа map в многопоточной среде можно:
- Использовать sync.Mutex или sync.RWMutex для защиты доступа к map.
- Применять 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")