Sobes.tech
Senior

Mutex va RWMutex nima? Ular qanday farq qiladi?

sobes.tech AI

AIdan javob

Go'da (sync.Mutex) bilan bog'liq bo'lgan Mutex - bu sinxronizatsiya primitive'idir, u resursga eksklyuziv kirishni ta'minlaydi. Bir gorutina Mutexni egallaganida, uni egallashga harakat qilayotgan boshqa gorutinalar uni bo'shatilgunga qadar bloklanadi.

RWMutex (sync.RWMutex) - bu Mutex kengaytmasi bo'lib, o'qish va yozish uchun kirishni ajratishga imkon beradi. U bir vaqtning o'zida bir nechta gorutinalarga ma'lumotlarni o'qishga (RLock) ruxsat beradi, lekin yozish (Lock) eksklyuziv kirishni talab qiladi va barcha o'quvchilar va yozuvchilarni bloklaydi.

Farqlar:

  • Mutex uni egallagan vaqt davomida kirishga harakat qilayotgan hamma uchun bloklaydi.
  • RWMutex bir nechta o'quvchilarga parallel ishlashga imkon beradi, lekin yozish hamma narsani bloklaydi.

Misol:

var mu sync.RWMutex
var data int

// O'qish
mu.RLock()
fmt.Println(data)
mu.RUnlock()

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