Назад к вопросам
СБЕР
Middle+
3
Чем отличается RWMutex от Mutex и когда выгоднее использовать RWMutex?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Mutex — это базовый мьютекс, который обеспечивает эксклюзивный доступ к ресурсу: в один момент времени только один горутина может захватить мьютекс и работать с защищёнными данными.
RWMutex (Read-Write Mutex) позволяет разделять блокировки на чтение и запись. Несколько горутин могут одновременно захватывать RLock (чтение), если нет активной записи. Запись (Lock) эксклюзивна и блокирует все остальные операции.
Когда выгодно использовать RWMutex:
- Если у вас много операций чтения и мало записи,
RWMutexувеличит параллелизм, позволяя нескольким читателям работать одновременно. - Если же операций записи много или чтение и запись примерно равны,
Mutexможет быть проще и эффективнее.
Пример:
var mu sync.RWMutex
var data int
func readData() int {
mu.RLock()
defer mu.RUnlock()
return data
}
func writeData(val int) {
mu.Lock()
defer mu.Unlock()
data = val
}
Здесь несколько горутин могут одновременно читать data, но запись будет эксклюзивной.