Junior — Middle
Kann man die Sicherheit beim gleichzeitigen Schreiben in eine Map aus mehreren Threads gewährleisten?
sobes.tech KI
Antwort von AI
In Go ist die Standardkarte (map) nicht thread-sicher für gleichzeitige Schreibzugriffe von mehreren Goroutinen. Wenn mehrere Goroutinen gleichzeitig ohne Synchronisierung in eine map schreiben, führt dies zu einem Panic.
Um Sicherheit bei gleichzeitigen Schreibzugriffen zu gewährleisten, kann man:
- Einen Mutex (sync.Mutex oder sync.RWMutex) verwenden, um den Zugriff auf die map zu schützen.
- Spezialisierte thread-sichere Datenstrukturen verwenden, wie z.B. sync.Map, die für konkurrierenden Zugriff vorgesehen ist.
Beispiel mit Mutex:
var mu sync.Mutex
var m = make(map[string]int)
func safeWrite(key string, value int) {
mu.Lock()
defer mu.Unlock()
m[key] = value
}
Oder sync.Map verwenden:
var m sync.Map
func safeWrite(key string, value int) {
m.Store(key, value)
}
Daher sollte bei gleichzeitigen Schreibzugriffen Synchronisation verwendet werden.