Sobes.tech
Back to questions
Middle+
4

Чем отличается RWMutex от Mutex и когда выгоднее использовать RWMutex?

Companies where asked
СБЕРСБЕР

Answer from AI

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, но запись будет эксклюзивной.