Junior — Middle
Lze bezpečně používat sdílené zdroje jako Map při současném přístupu z více gorutin?
sobes.tech AI
Odpověď od AI
Ne, standardní mapa (map) v Go není vlákny bezpečná a nemůže být současně používána z více gorutin bez dodatečné synchronizace. Bez ochrany může dojít k závodům a panice.
Pro bezpečné používání sdílených zdrojů typu mapy v vícevláknovém prostředí lze:
- Použít sync.Mutex nebo sync.RWMutex k ochraně přístupu k mapě.
- Použít sync.Map, specializovanou a vlákny bezpečnou datovou strukturu pro mapy.
Příklad s mutexem:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Použití sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")