Что такое RWMutex

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

Ответ

RWMutex (Read-Write Mutex) — это блокировка в Go, которая позволяет нескольким горутинам одновременно читать данные, но только одной — писать. Это эффективнее обычного Mutex, когда операции чтения частые, а записи редкие.

Основные методы:

  • RLock() — блокировка для чтения (множественный доступ)
  • RUnlock() — разблокировка чтения
  • Lock() — эксклюзивная блокировка для записи
  • Unlock() — разблокировка записи

Пример:

var (
    data  map[string]string
    mutex sync.RWMutex
)

func read(key string) string {
    mutex.RLock()
    defer mutex.RUnlock()
    return data[key]
}

func write(key, value string) {
    mutex.Lock()
    defer mutex.Unlock()
    data[key] = value
}

Важно: Нельзя обновлять RLock до Lock (deadlock). Читающие горутины ждут завершения всех операций записи перед получением доступа.