Sobes.tech
Junior — Middle

Jaké důsledky nastávají při současném zápisu do Mapy z různých konkurenčních gorutin?

sobes.tech AI

Odpověď od AI

V Go standardní mapě (map) není bezpečná pro současné čtení a zápis z více gorutin. Pokud několik gorutin současně zkouší zapisovat do stejné mapy bez synchronizace, povede to ke konkurenčním podmínkám, panice za běhu (fatální chyba: současné zápisy do mapy) a nepředvídatelnému chování programu.

Aby se předešlo problémům, je třeba použít:

  • Mutexy (sync.Mutex) k ochraně přístupu k mapě.
  • Specializované bezpečné datové struktury pro více vláken, například sync.Map.

Příklad s 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 takové ochrany může program neočekávaně skončit.