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