Back to questions
Senior
4
Чем отличается Mutex от RWMutex?
Companies where asked
Small
Answer from AI
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
}