Junior — Middle
Is het mogelijk om veilig gegevens uit een map-gegevensstructuur te lezen zonder het risico op fouten?
sobes.tech AI
Antwoord van AI
In Go is het lezen uit een map veilig als op dat moment niemand de map aan het wijzigen is. Echter, als er parallel geschreven wordt (toevoegen, verwijderen of wijzigen van elementen), kan het lezen leiden tot een panic (runtime error).
Om veilig uit een map te lezen in een multithread-omgeving, worden meestal gebruikt:
- sync.RWMutex — om de map te vergrendelen voor schrijven en gelijktijdig lezen toe te staan
- sync.Map — een gespecialiseerde, thread-veilige datastructuur voor maps
Voorbeeld met RWMutex:
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
}
Zo is veilig lezen mogelijk als synchronisatie met schrijven wordt gegarandeerd.