Sobes.tech
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.