Sobes.tech
Назад к вопросам
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
}