Back to questions
Middle — Middle+
88
Можно ли безопасно выполнять запись в контейнер map в многопоточной среде без дополнительной синхронизации?
Answer from AI
sobes.tech AI
В Go стандартная карта (map) не является потокобезопасной для записи. Если несколько горутин одновременно записывают в map без синхронизации, это приведёт к гонкам данных и панике во время выполнения.
Для безопасной записи в map в многопоточной среде нужно использовать:
- sync.Mutex или sync.RWMutex для блокировки доступа;
- sync.Map — потокобезопасную реализацию карты из стандартной библиотеки.
Пример с sync.Mutex:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Без такой синхронизации запись в map небезопасна.