Junior — Middle
Co se stane, pokud několik gorutin současně pokusí získat přístup ke stejnému klíči v mapě?
sobes.tech AI
Odpověď od AI
V jazyce Go není mapa (mapa) vlákny bezpečná datová struktura. Pokud několik gorutin současně čte a/nebo zapisuje do stejné mapy bez synchronizace, dojde ke konkurenčním podmínkám a pravděpodobně k panice za běhu.
Abychom tomu zabránili, je nutné použít mechanismy synchronizace, například:
sync.Mutexpro zámek přístupu k mapě.sync.RWMutexpro oddělení zámků pro čtení a zápis.- Specializované struktury, například
sync.Map, které jsou bezpečné pro konkurenční přístup.
Příklad použití sync.Mutex k ochraně 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]
}