Назад к вопросам
Junior — Middle
76
Каким образом обеспечить безопасность работы с Map в многопоточной среде?
Компании, где спрашивали
Betera Group
Ответ от нейросети
sobes.tech AI
В Go стандартная карта (map) не является потокобезопасной для одновременного чтения и записи из разных горутин. Чтобы обеспечить безопасность работы с map в многопоточной среде, можно использовать:
- Мьютексы (sync.Mutex или sync.RWMutex) — блокируют доступ к map при чтении/записи.
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) int {
mu.RLock()
defer mu.RUnlock()
return m[key]
}
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
- sync.Map — специализированная потокобезопасная структура из стандартной библиотеки, оптимизированная для случаев с большим количеством горутин.
var m sync.Map
func write(key string, value int) {
m.Store(key, value)
}
func read(key string) (int, bool) {
val, ok := m.Load(key)
if !ok {
return 0, false
}
return val.(int), true
}
Выбор зависит от конкретной задачи: если нужно много операций записи и чтения, лучше использовать мьютексы; если операции преимущественно чтение, sync.Map может быть эффективнее.