Sobes.tech
Junior — Middle

Kuo skiriasi standartinio mutex naudojimas nuo mutex su skaitymo ir rašymo galimybe (RWMutex)?

sobes.tech AI

Atsakymas iš AI

Standartinis Mutex (sync.Mutex) Go užtikrina išskirtinį prieigą prie ištekliaus: kiekvienu momentu tik viena gorutina gali įgyti mutex, kitos laukia.

Mutex su galimybe skaityti ir rašyti (sync.RWMutex) leidžia:

  • Kelios gorutinos gali vienu metu įgyti mutex skaitymui (RLock), jei nėra rašytojo.
  • Tik viena gorutina gali įgyti mutex rašymui (Lock), tuo pačiu blokuodama visus skaitytojus ir kitus rašytojus.

Tai pagerina našumą scenarijuose, kur skaitymo operacijų yra daug daugiau nei rašymo, nes skaitymai neblokuoja vieni kitų.

Pavyzdys:

var mu sync.RWMutex
var data int

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

// Rašymas
mu.Lock()
data = 42
mu.Unlock()

Jei naudojate įprastą Mutex, net ir skaitymai blokuos vieni kitus, kas sumažina paralelizmą.