Sobes.tech
Back to questions
Junior — Middle
93

Чем отличается использование стандартного мьютекса от мьютекса с возможностью чтения и записи (RWMutex)?

Companies where asked
Lamoda Tech
МТСМТС
IDT
Ecom.tech
BWG
Кадровое агентство BWG
МТС DigitalМТС Digital

Answer from AI

sobes.tech AI

Стандартный мьютекс (sync.Mutex) в Go обеспечивает эксклюзивный доступ к ресурсу: в каждый момент времени только один горутина может захватить мьютекс, остальные ждут.

Мьютекс с возможностью чтения и записи (sync.RWMutex) позволяет:

  • Несколько горутин могут одновременно захватывать мьютекс на чтение (RLock), если нет писателя.
  • Только одна горутина может захватить мьютекс на запись (Lock), при этом все читатели и другие писатели блокируются.

Это повышает производительность в сценариях, где операций чтения гораздо больше, чем записи, так как чтения не блокируют друг друга.

Пример:

var mu sync.RWMutex
var data int

// Чтение
mu.RLock()
fmt.Println(data)
mu.RUnlock()

// Запись
mu.Lock()
data = 42
mu.Unlock()

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