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()