Intern
Biztonságos a térképek olvasása Go-ban?
sobes.tech MI
Válasz az MI-től
Go nyelven a map olvasása nem szálbiztos, ha egyidejűleg írás is történik. Többszálas környezetben biztonságos olvasáshoz szinkronizációt kell alkalmazni, például sync.RWMutex használatával olvasási és írási zárolást, vagy a sync.Map használatával, amely kifejezetten a konkurens hozzáférésre lett tervezve.
Példa sync.RWMutex-szel:
import (
"sync"
)
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock() // olvasási zárolás
defer mu.RUnlock() // zárolás feloldása
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock() // írási zárolás
defer mu.Unlock() // zárolás feloldása
m[key] = val
}
Vagy használja a sync.Map-ot:
import "sync"
var m sync.Map
func read(key string) (interface{}, bool) {
return m.Load(key)
}
func write(key string, val interface{}) {
m.Store(key, val)
}
A sync.Map akkor hasznos, ha sok konkurens művelet történik, de sajátosságai vannak a teljesítmény és az API szempontjából.