Junior — Middle
Czy można zapewnić bezpieczeństwo podczas jednoczesnego zapisywania do Mapy z wielu wątków?
sobes.tech AI
Odpowiedź od AI
W Go standardowa mapa (mapa) nie jest bezpieczna dla operacji zapisu wykonywanych jednocześnie przez wiele gorutyn. Jeśli kilka gorutyn zapisuje do mapy bez synchronizacji, spowoduje to panic.
Aby zapewnić bezpieczeństwo podczas równoczesnych zapisów, można:
- Używać mutexa (sync.Mutex lub sync.RWMutex) do ochrony dostępu do mapy.
- Używać specjalizowanych, bezpiecznych dla wątków struktur danych, takich jak sync.Map, które są przeznaczone do dostępu współbieżnego.
Przykład z 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
}
Lub użyć sync.Map:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
W ten sposób, dla bezpieczeństwa podczas równoczesnych zapisów, należy używać synchronizacji.