Junior — Middle
Was passiert, wenn mehrere Goroutines gleichzeitig versuchen, auf denselben Schlüssel in einer Karte zuzugreifen?
sobes.tech KI
Antwort von AI
In Go ist eine Karte (map) keine threadsichere Datenstruktur. Wenn mehrere Goroutines gleichzeitig versuchen, in dieselbe Karte zu lesen und/oder zu schreiben, ohne zu synchronisieren, führt dies zu Rennbedingungen und wahrscheinlich zu einem Laufzeit-Panic.
Um dies zu vermeiden, müssen Synchronisationsmechanismen verwendet werden, zum Beispiel:
sync.Mutexzum Sperren des Zugriffs auf die Karte.sync.RWMutexzum Trennen von Lese- und Schreibsperren.- Spezialisierte Strukturen wie
sync.Map, die für den gleichzeitigen Zugriff sicher sind.
Beispiel für die Verwendung von sync.Mutex, um eine Karte zu schützen:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}