Sobes.tech
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.Mutex zum Sperren des Zugriffs auf die Karte.
  • sync.RWMutex zum 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]
}