Sobes.tech
Junior — Middle

Koja je razlika između korišćenja standardnog muteksa i muteksa sa mogućnošću čitanja i pisanja (RWMutex)?

sobes.tech АИ

Одговор од АИ

Standardni Mutex (sync.Mutex) u Go omogućava ekskluzivan pristup resursu: u svakom trenutku samo jedna gorutina može da ga zauzme, ostale čekaju.

Mutex sa mogućnošću čitanja i pisanja (sync.RWMutex) omogućava:

  • Više gorutina može istovremeno da zauzme mutex za čitanje (RLock), ako nema pisca.
  • Samo jedna gorutina može da zauzme mutex za pisanje (Lock), blokirajući sve čitaoce i ostale pisce.

Ovo povećava performanse u scenarijima gde su operacije čitanja mnogo češće od pisanja, jer čitanja ne blokiraju jedno drugo.

Primer:

var mu sync.RWMutex
var data int

// Čitanje
mu.RLock()
fmt.Println(data)
mu.RUnlock()

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

Ako koristite običan Mutex, čak i čitanja će blokirati jedno drugo, što smanjuje paralelizam.