Зачем нужно разделение на чтение и запись в RWMutex

«Зачем нужно разделение на чтение и запись в RWMutex» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RWMutex (Read-Write Mutex) позволяет оптимизировать производительность в случаях, когда операции чтения преобладают над операциями записи.

Основные преимущества:

  • Множество горутин могут одновременно читать данные (RLock/RUnlock)
  • Только одна горутина может писать в любой момент времени (Lock/Unlock)
  • Пока нет записи, читатели не блокируют друг друга

Пример:

var (
    counter int
    rwMu    sync.RWMutex
)

func read() int {
    rwMu.RLock()
    defer rwMu.RUnlock()
    return counter
}

func write(n int) {
    rwMu.Lock()
    defer rwMu.Unlock()
    counter = n
}

Используйте RWMutex вместо обычного Mutex, когда у вас частое чтение и редкая запись - это даст прирост производительности за счет параллельного чтения.