Sobes.tech
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ć.