Senior
Мутекс ва RWMutex нима? Улар қандай фарқ қилади?
sobes.tech AI
Ҷавоб аз AI
Go-дегі (sync.Mutex) — бұл синхрондау үшін primitive, ол ресурсқа эксклюзивті қол жеткізуді қамтамасыз етеді. Бір горутина Mutex-ті иеленгенде, оны иеленуге тырысқан басқа горутиналар босатылғанша блокталады.
RWMutex (sync.RWMutex) — бұл Mutex-тің кеңейтілген нұсқасы, ол оқу және жазу үшін қол жеткізуді бөлуге мүмкіндік береді. Ол бірнеше горутиналарға бір уақытта деректерді оқуға (RLock) мүмкіндік береді, бірақ жазу (Lock) эксклюзивті қол жеткізуді талап етеді және барлық оқырмандар мен жазушыларды блоктайды.
Айырмашылықтар:
- Mutex оны иеленген кезде қол жеткізуді алуға тырысқан барлық адамдарды блоктайды.
- RWMutex бірнеше оқырманға параллель жұмыс істеуге мүмкіндік береді, бірақ жазу барлық адамдарды блоктайды.
Мысал:
var mu sync.RWMutex
var data int
// Оқу
mu.RLock()
fmt.Println(data)
mu.RUnlock()
// Жазу
mu.Lock()
data = 42
mu.Unlock()