Junior — Middle
Kann man gemeinsam genutzte Ressourcen wie Map sicher verwenden, wenn sie gleichzeitig von mehreren Goroutinen zugänglich sind?
sobes.tech KI
Antwort von AI
Nein, die Standardkarte in Go ist nicht threadsicher und kann ohne zusätzliche Synchronisierung nicht gleichzeitig von mehreren Goroutinen verwendet werden. Der gleichzeitige Zugriff ohne Schutz kann zu Rennbedingungen und Panik führen.
Um gemeinsam genutzte Ressourcen wie Karten in einer Multithread-Umgebung sicher zu verwenden, kann man:
- sync.Mutex oder sync.RWMutex verwenden, um den Zugriff auf die Karte zu schützen.
- sync.Map verwenden, eine spezialisierte und threadsichere Datenstruktur für Karten.
Beispiel mit Mutex:
var mu sync.Mutex
var m = make(map[string]int)
func write(key string, value int) {
mu.Lock()
m[key] = value
mu.Unlock()
}
func read(key string) int {
mu.Lock()
defer mu.Unlock()
return m[key]
}
Verwendung von sync.Map:
var m sync.Map
m.Store("key", 42)
value, ok := m.Load("key")