Назад к вопросам
Senior
3
Чем отличается Mutex от RWMutex?
Компании, где спрашивали
Small
Ответ от нейросети
sobes.tech AI
Mutex и RWMutex — это механизмы синхронизации в Go для управления доступом к разделяемым ресурсам.
-
Mutex(взаимное исключение) позволяет только одному горутину одновременно владеть блокировкой. Все остальные горутины ждут, пока блокировка не будет освобождена. -
RWMutex(чтение-запись мьютекс) разделяет блокировку на две части: для чтения и для записи. Несколько горутин могут одновременно держать блокировку на чтение (shared lock), но запись требует эксклюзивного доступа (exclusive lock). Это повышает производительность, когда операций чтения много, а записи редки.
Пример использования RWMutex:
type SafeCounter struct {
mu sync.RWMutex
count int
}
func (c *SafeCounter) Read() int {
c.mu.RLock() // блокировка для чтения
defer c.mu.RUnlock()
return c.count
}
func (c *SafeCounter) Write(val int) {
c.mu.Lock() // эксклюзивная блокировка для записи
defer c.mu.Unlock()
c.count = val
}