Sobes.tech
Junior — Middle

Je bezpečné používať spoločné zdroje ako Map pri súčasnom prístupe z viacerých gorutín?

sobes.tech AI

Odpoveď od AI

Nie, štandardná mapa (map) v Go nie je bezpečná pre viacvláknové prostredie a nemôže byť súčasne používaná z viacerých gorutín bez dodatočnej synchronizácie. Bez ochrany môže dôjsť k závodom a panike.

Na bezpečné používanie zdieľaných zdrojov typu mapa v viacvláknovom prostredí môžete:

  • Použiť sync.Mutex alebo sync.RWMutex na ochranu prístupu k mape.
  • Použiť sync.Map, špecializovanú a bezpečnú štruktúru dát pre mapy.

Príklad s mutexom:

var mu sync.Mutex
var m = make(map[string]int)

func write(key string, value int) {
    mu.Lock()
    m[key] = value
    mu.Unlock()
}

func read(key string) int {
    mu.Lock()
    defer mu.Unlock()
    return m[key]
}

Použitie sync.Map:

var m sync.Map

m.Store("key", 42)
value, ok := m.Load("key")