Sobes.tech
Назад к вопросам
Junior — Middle
76

Каким образом обеспечить безопасность работы с Map в многопоточной среде?

Компании, где спрашивали
Betera Group

Ответ от нейросети

sobes.tech AI

В Go стандартная карта (map) не является потокобезопасной для одновременного чтения и записи из разных горутин. Чтобы обеспечить безопасность работы с map в многопоточной среде, можно использовать:

  1. Мьютексы (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
}
  1. 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 может быть эффективнее.