Назад к вопросам
МТС
МТС Digital
Junior — Middle
92
Чем отличается использование стандартного мьютекса от мьютекса с возможностью чтения и записи (RWMutex)?
Компании, где спрашивали
Lamoda Tech
IDT
Ecom.tech
BWG
Кадровое агентство BWG
Ответ от нейросети
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, то даже чтения будут блокировать друг друга, что снижает параллелизм.