Middle — Middle+
Lze bezpečně zapisovat do kontejneru map v prostředí s více vlákny bez další synchronizace?
sobes.tech AI
Odpověď od AI
V Go standardní mapě (map) není zápis z více vláken bezpečný. Pokud několik gorutin současně zapisuje do mapy bez synchronizace, dojde ke závodům a panice za běhu.
Pro bezpečný zápis do mapy v prostředí s více vlákny je třeba použít:
- sync.Mutex nebo sync.RWMutex k zámku přístupu;
- sync.Map, vlákny bezpečnou implementaci mapy ze standardní knihovny.
Příklad s sync.Mutex:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Bez takové synchronizace není zápis do mapy bezpečný.