Senior
Какво е Mutex и RWMutex? Как се различават?
sobes.tech AI
Отговор от AI
Mutex (в Go — sync.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()