Junior — Middle
Čo sa stane, ak niekoľko gorutín súčasne skúša získať prístup k rovnakému kľúču v mape?
sobes.tech AI
Odpoveď od AI
V jazyku Go nie je mapa (map) bezpečnou dátovou štruktúrou pre súbežný prístup. Ak niekoľko gorútín súčasne číta a/alebo zapisuje do tej istej mapy bez synchronizácie, dôjde ku konkurenčným podmienkam a pravdepodobne k panike počas behu.
Aby ste tomu zabránili, je potrebné použiť mechanizmy synchronizácie, napríklad:
sync.Mutexna zamknutie prístupu k mape.sync.RWMutexna oddelenie zámkov pre čítanie a zápis.- Špecializované štruktúry, ako je
sync.Map, ktoré sú bezpečné pre konkurenčný prístup.
Príklad použitia sync.Mutex na ochranu mapy:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}