Sobes.tech
Junior — Middle

V čom spočíva rozdiel medzi použitím štandardného mutexu a mutexu s možnosťou čítania a zápisu (RWMutex)?

sobes.tech AI

Odpoveď od AI

Štandardný mutex (sync.Mutex) v Go zabezpečuje exkluzívny prístup k zdroju: v každom momente môže mutex získať iba jedna gorutina, ostatné čakajú.

Mutex s možnosťou čítania a zápisu (sync.RWMutex) umožňuje:

  • Viacero gorutín môže súčasne získať mutex na čítanie (RLock), ak nie je žiadny pisateľ.
  • Len jedna gorutina môže získať mutex na zápis (Lock), čím blokuje všetkých čitateľov a iných pisateľov.

Toto zvyšuje výkon v scenároch, kde operácie čítania sú oveľa častejšie ako zápisy, pretože čítania sa navzájom neblokujú.

Príklad:

var mu sync.RWMutex
var data int

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

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

Ak použijete bežný Mutex, aj čítania sa budú blokovať navzájom, čo znižuje paralelizmus.