Middle — Middle+
Czy można bezpiecznie wykonywać zapis w kontenerze map w środowisku wielowątkowym bez dodatkowej synchronizacji?
sobes.tech AI
Odpowiedź od AI
W Go standardowa mapa (mapa) nie jest bezpieczna dla operacji zapisu w środowisku wielowątkowym. Jeśli kilka gorutyn jednocześnie zapisuje do mapy bez synchronizacji, spowoduje to warunki wyścigu i panikę podczas działania.
Aby bezpiecznie zapisywać do mapy w środowisku wielowątkowym, należy użyć:
- sync.Mutex lub sync.RWMutex do blokowania dostępu;
- sync.Map, bezpiecznej dla wątków implementacji mapy z biblioteki standardowej.
Przykład z 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 takiej synchronizacji zapis do mapy jest niebezpieczny.