Junior — Middle
Как се държи програмата, ако едновременно се извършва конкурентно четене на стойности от map?
sobes.tech AI
Отговор от AI
В Go безопасното едновременено четене от карта не предизвиква паника или грешки. Проблемите възникват, ако едновременно се извършва писане или четене и писане. Ако в програмата само няколко горутини четат стойности от картата без да ги променят, това е безопасно. Но ако поне една горутина променя картата, е необходимо да се използват механизми за синхронизация като 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
}
По този начин, едновременното четене без писане е безопасно, но при писане е необходима синхронизация.