Junior — Middle
Ist es möglich, sichere Daten aus einer Map-Datenstruktur ohne Fehler zu lesen?
sobes.tech KI
Antwort von AI
In Go ist das Lesen aus einer Map sicher, wenn in diesem Moment niemand die Map verändert. Wenn jedoch gleichzeitig geschrieben wird (Hinzufügen, Entfernen oder Ändern von Elementen), kann das Lesen zu einem Panic (Laufzeitfehler) führen.
Um in einer Multithread-Umgebung sicher aus einer Map zu lesen, verwendet man in der Regel:
- sync.RWMutex — um die Map für Schreibzugriffe zu sperren und paralleles Lesen zu ermöglichen
- sync.Map — eine spezialisierte, threadsichere Datenstruktur für Maps
Beispiel mit 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
}
Auf diese Weise ist sicheres Lesen möglich, wenn die Synchronisation mit der Schreiboperation gewährleistet ist.