Какие знаешь виды Mutex в Go

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

Ответ

В Go есть два основных вида мьютексов из пакета sync:

  1. Mutex - обычная блокировка с двумя состояниями (заблокирован/разблокирован).
    var mu sync.Mutex
    mu.Lock()
    // критическая секция
    mu.Unlock()
  1. RWMutex - читатель-писатель. Множество горутин может читать (RLock()), но только одна - писать (Lock()).
    var rw sync.RWMutex
    rw.RLock() // для чтения
    // чтение данных
    rw.RUnlock()

    rw.Lock() // для записи
    // изменение данных
    rw.Unlock()

Разница:

  • Mutex блокирует полностью, даже для чтения.
  • RWMutex эффективнее, когда много читателей и редкие записи.

⚠️ Важно избегать deadlock и всегда разблокировать мьютекс (можно использовать defer).