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