Junior — Middle
Lze zajistit bezpečnost při současném zápisu do Mapy z více vláken?
sobes.tech AI
Odpověď od AI
V Go standardní mapě (map) není bezpečná pro současný zápis z více gorutin. Pokud několik gorutin současně zapisuje do mapy bez synchronizace, dojde k panice.
Pro zajištění bezpečnosti při současném zápisu lze:
- Použít mutex (sync.Mutex nebo sync.RWMutex) k ochraně přístupu k mapě.
- Použít specializované bezpečné datové struktury pro konkurentní přístup, například sync.Map, která je určena pro konkurenční přístup.
Příklad s mutexem:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Nebo použít sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Tímto způsobem je při současném zápisu nutné používat synchronizaci.