Junior — Middle
Jakie są konsekwencje jednoczesnego zapisywania do Mapy z różnych konkurujących gorutyn?
sobes.tech AI
Odpowiedź od AI
W Go, standardowa mapa (map) nie jest bezpieczna dla operacji jednoczesnego odczytu i zapisu z wielu gorutyn. Jeśli kilka gorutyn jednocześnie spróbuje zapisywać do tej samej mapy bez synchronizacji, spowoduje to warunki wyścigu, panikę runtime (fatalny błąd: równoczesne zapisy w mapie) i nieprzewidywalne zachowanie programu.
Aby uniknąć problemów, należy używać:
- Mutexów (sync.Mutex) do ochrony dostępu do mapy.
- Specjalistycznych, bezpiecznych dla wątków struktur danych, takich jak sync.Map.
Przykład z mutexem:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
Bez takiej ochrony program może nagle się zakończyć.