Sobes.tech
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
}

По този начин, едновременното четене без писане е безопасно, но при писане е необходима синхронизация.