Sobes.tech
Junior — Middle

V čem spočívá rozdíl mezi použitím standardového mutexu a mutexu s možností čtení a zápisu (RWMutex)?

sobes.tech AI

Odpověď od AI

Standardový mutex (sync.Mutex) v Go zajišťuje exkluzivní přístup k prostředku: v každém okamžiku může mutex získat pouze jedna gorutina, ostatní čekají.

Mutex s možností čtení a zápisu (sync.RWMutex) umožňuje:

  • Několik gorutin může současně získat mutex pro čtení (RLock), pokud není žádný zapisovatel.
  • Pouze jedna gorutina může získat mutex pro zápis (Lock), čímž blokuje všechny čtenáře i ostatní zapisovatele.

To zvyšuje výkon v scénářích, kde jsou operace čtení mnohem častější než zápisy, protože čtení se navzájem neblokují.

Příklad:

var mu sync.RWMutex
var data int

// Čtení
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Zápis
mu.Lock()
data = 42
mu.Unlock()

Pokud použijete běžný Mutex, i čtení se budou blokovat navzájem, což snižuje paralelismus.