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.