Junior — Middle
Je bezpečné používať spoločné zdroje ako Map pri súčasnom prístupe z viacerých gorutín?
sobes.tech AI
Odpoveď od AI
Nie, štandardná mapa (map) v Go nie je bezpečná pre viacvláknové prostredie a nemôže byť súčasne používaná z viacerých gorutín bez dodatočnej synchronizácie. Bez ochrany môže dôjsť k závodom a panike.
Na bezpečné používanie zdieľaných zdrojov typu mapa v viacvláknovom prostredí môžete:
- Použiť sync.Mutex alebo sync.RWMutex na ochranu prístupu k mape.
- Použiť sync.Map, špecializovanú a bezpečnú štruktúru dát pre mapy.
Príklad s mutexom:
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žitie sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")