Назад к вопросам
Junior — Middle
83
Как ведёт себя программа, если одновременно осуществляется конкурентное чтение значений из map?
Ответ от нейросети
sobes.tech AI
В Go одновременное конкурентное чтение из map безопасно и не приводит к панике или ошибкам. Проблемы возникают, если одновременно происходит запись или чтение и запись. При одновременной записи и чтении из map без синхронизации программа может вызвать runtime panic с сообщением "concurrent map read and map write".
Если в программе только несколько горутин читают значения из map, без изменений, то это безопасно. Но если есть хотя бы одна горутина, которая изменяет map, необходимо использовать механизмы синхронизации, например, sync.RWMutex или sync.Map.
Пример безопасного чтения с использованием sync.RWMutex:
var m = make(map[string]int)
var 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
}
Таким образом, конкурентное чтение без записи безопасно, но при наличии записи нужна синхронизация.