Sobes.tech
Junior — Middle

Worin besteht der Unterschied zwischen der Verwendung eines Standard-Mutex und eines Mutex mit Lese- und Schreibzugriff (RWMutex)?

sobes.tech KI

Antwort von AI

Der Standard-Mutex (sync.Mutex) in Go sorgt für exklusiven Zugriff auf eine Ressource: Zu jedem Zeitpunkt kann nur eine Goroutine den Mutex sperren, die anderen warten.

Der Mutex mit Lese- und Schreibfunktion (sync.RWMutex) erlaubt:

  • Mehrere Goroutines können gleichzeitig den Mutex für das Lesen (RLock) sperren, wenn kein Schreiber aktiv ist.
  • Nur eine Goroutine kann den Mutex für das Schreiben (Lock) sperren, wobei alle Leser und andere Schreiber blockiert werden.

Dies erhöht die Leistung in Szenarien, in denen Leseoperationen viel häufiger sind als Schreiboperationen, da Lesezugriffe sich nicht gegenseitig blockieren.

Beispiel:

var mu sync.RWMutex
var data int

// Lesen
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Schreiben
mu.Lock()
data = 42
mu.Unlock()

Wenn man einen normalen Mutex verwendet, blockieren sogar die Lesezugriffe gegenseitig, was die Parallelität verringert.