Junior — Middle
Kako se ponaša program ako se istovremeno vrši konkurentno čitanje vrednosti iz mape?
sobes.tech АИ
Одговор од АИ
U Go jeziku, istovremeno sigurno čitanje iz mape ne izaziva paniku ili greške. Problemi nastaju ako se istovremeno vrši pisanje ili čitanje i pisanje. Ako u programu samo nekoliko gorutina čita vrednosti iz mape bez izmene, to je sigurno. Ali ako bar jedna gorutina menja mapu, potrebno je koristiti mehanizme sinhronizacije, poput sync.RWMutex ili sync.Map.
Primer sigurnog čitanja korišćenjem 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
}
Na ovaj način, istovremeno čitanje bez pisanja je sigurno, ali pri pisanju je potrebna sinhronizacija.