Sobes.tech
Junior — Middle

Care este diferența dintre utilizarea unui mutex standard și a unui mutex cu capacitate de citire și scriere (RWMutex)?

sobes.tech AI

Răspuns de la AI

Mutexul standard (sync.Mutex) în Go asigură accesul exclusiv la o resursă: în fiecare moment, doar o gorutină poate captura mutex-ul, celelalte așteaptă.

Mutexul cu posibilitate de citire și scriere (sync.RWMutex) permite:

  • Mai multe gorutine pot captura simultan mutex-ul pentru citire (RLock), dacă nu există un scriitor.
  • Doar o gorutină poate captura mutex-ul pentru scriere (Lock), blocând toți cititorii și alți scriitori.

Aceasta crește performanța în scenarii în care operațiile de citire sunt mult mai frecvente decât cele de scriere, deoarece citirile nu se blochează reciproc.

Exemplu:

var mu sync.RWMutex
var data int

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

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

Dacă se folosește un Mutex obișnuit, chiar și citirile se vor bloca reciproc, ceea ce reduce paralelismul.