Junior — Middle
Biztonságosan olvashatóak-e az adatok egy map adatstruktúrából anélkül, hogy hibák lépnének fel?
sobes.tech MI
Válasz az MI-től
Go-ban a térkép olvasása biztonságos, ha eközben senki sem módosítja azt. Azonban, ha párhuzamosan írnak (hozzáadás, törlés vagy elemek módosítása), az olvasás pánikhoz (futási hiba) vezethet.
A több szál közötti biztonságos olvasáshoz általában a következőket használják:
- sync.RWMutex — a térkép írására zár, és lehetővé teszi a párhuzamos olvasást
- sync.Map — egy speciális, szálbiztos adatstruktúra térképekhez
RWMutex példával:
var (
m = make(map[string]int)
mu sync.RWMutex
)
func read(key string) (int, bool) {
mu.RLock()
defer mu.RUnlock()
val, ok := m[key]
return val, ok
}
func write(key string, val int) {
mu.Lock()
defer mu.Unlock()
m[key] = val
}
Így a biztonságos olvasás elérhető, ha a szinkronizáció biztosított a írással.