Back to questions
Junior — Middle
84
Как ведёт себя программа, если одновременно осуществляется конкурентное чтение значений из map?
Answer from AI
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
}
Таким образом, конкурентное чтение без записи безопасно, но при наличии записи нужна синхронизация.