Junior — Middle
Може ли да се осигури безопасност при едновременен запис в Map от няколко потока?
sobes.tech AI
Отговор от 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)
}
По този начин, за безопасност при едновременен запис, трябва да се използва синхронизация.