Sobes.tech
Junior — Middle

Standart mutex va o'qish va yozish imkoniyatiga ega mutex (RWMutex) foydalanish o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Standart Mutex (sync.Mutex) Go da'vo resursga eksklyuziv kirish imkonini beradi: har bir vaqtda faqat bitta gorutina mutexni olishi mumkin, boshqalar kutishadi.

O'qish va yozish imkoniyatiga ega sync.RWMutex mutexi quyidagilarni amalga oshiradi:

  • Bir nechta gorutinlar bir vaqtning o'zida mutexni o'qish uchun (RLock) olishi mumkin, agar yozuvchi bo'lmasa.
  • Faqat bitta gorutin yozish uchun (Lock) mutexni olishi mumkin va bu barcha o'qishlar va boshqa yozuvchilarni bloklaydi.

Bu o'qish operatsiyalarining yozish operatsiyalaridan ko'proq bo'lganda, ularning bir-birini bloklamasligi uchun ishlash samaradorligini oshiradi.

Misol:

var mu sync.RWMutex
var data int

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

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

Agar oddiy Mutex ishlatilsa, hatto o'qishlar ham bir-birini bloklaydi, bu esa parallelizmni kamaytiradi.