Sobes.tech
Middle — Middle+

Lze bezpečně zapisovat do kontejneru map v prostředí s více vlákny bez další synchronizace?

sobes.tech AI

Odpověď od AI

V Go standardní mapě (map) není zápis z více vláken bezpečný. Pokud několik gorutin současně zapisuje do mapy bez synchronizace, dojde ke závodům a panice za běhu.

Pro bezpečný zápis do mapy v prostředí s více vlákny je třeba použít:

  • sync.Mutex nebo sync.RWMutex k zámku přístupu;
  • sync.Map, vlákny bezpečnou implementaci mapy ze standardní knihovny.

Příklad s 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 takové synchronizace není zápis do mapy bezpečný.