Back to questions
Junior — Middle
88
Каким образом обеспечить безопасный доступ к карте в многопоточной среде?
Answer from AI
sobes.tech AI
В Go для безопасного доступа к карте (map) в многопоточной среде необходимо использовать синхронизацию, так как map не является потокобезопасной структурой данных. Самый распространённый способ — использовать мьютекс (sync.Mutex или sync.RWMutex) для блокировки доступа при чтении и записи.
Пример с использованием sync.RWMutex:
import (
"sync"
)
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
}
Также в Go есть тип sync.Map, который реализует потокобезопасную карту с оптимизациями для частых операций чтения. Его можно использовать, если не нужна строгая типизация и нужна простота:
import "sync"
var m sync.Map
m.Store("key", 42) // запись
value, ok := m.Load("key") // чтение
Таким образом, для безопасного доступа к map в многопоточной среде используйте мьютексы или sync.Map.