Sobes.tech
Junior — Middle

Lze zajistit bezpečnost při současném zápisu do Mapy z více vláken?

sobes.tech AI

Odpověď od AI

V Go standardní mapě (map) není bezpečná pro současný zápis z více gorutin. Pokud několik gorutin současně zapisuje do mapy bez synchronizace, dojde k panice.

Pro zajištění bezpečnosti při současném zápisu lze:

  • Použít mutex (sync.Mutex nebo sync.RWMutex) k ochraně přístupu k mapě.
  • Použít specializované bezpečné datové struktury pro konkurentní přístup, například sync.Map, která je určena pro konkurenční přístup.

Příklad s 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
}

Nebo použít sync.Map:

var m sync.Map

func safeWrite(key string, value int) {
    m.Store(key, value)
}

Tímto způsobem je při současném zápisu nutné používat synchronizaci.