Sobes.tech
Junior — Middle

Wie gewährleistet man sicheren Zugriff auf die Karte in einer Multithread-Umgebung?

sobes.tech KI

Antwort von AI

In Go ist es notwendig, Synchronisation zu verwenden, um in einer Multithread-Umgebung sicher auf eine Karte (map) zuzugreifen, da map keine threadsichere Datenstruktur ist. Die gebräuchlichste Methode ist die Verwendung eines Mutex (sync.Mutex oder sync.RWMutex), um den Zugriff beim Lesen und Schreiben zu sperren.

Beispiel mit sync.RWMutex:

import (
    "sync"
)

var (
    m = make(map[string]int)
    mu sync.RWMutex
)

func read(key string) int {
    mu.RLock()         // Sperre für Lesezugriff
    defer mu.RUnlock()
    return m[key]
}

func write(key string, value int) {
    mu.Lock()          // Sperre für Schreibzugriff
    defer mu.Unlock()
    m[key] = value
}

In Go gibt es auch den Typ sync.Map, der eine threadsichere Karte mit Optimierungen für häufige Leseoperationen implementiert. Er kann verwendet werden, wenn keine strenge Typisierung erforderlich ist und Einfachheit gewünscht wird:

import "sync"

var m sync.Map

m.Store("key", 42)          // Schreiben
value, ok := m.Load("key")  // Lesen

Daher verwenden Sie für sicheren Zugriff auf eine map in einer Multithread-Umgebung Mutexes oder sync.Map.