Sobes.tech
Назад к вопросам
Middle+
3

Расскажите про Mutex и RWMutex, чем они отличаются и где предпочитаете использовать.

Компании, где спрашивали
Servicepipi

Ответ от нейросети

sobes.tech AI

Mutex (взаимное исключение) и RWMutex (мьютекс с разделением на чтение и запись) — это механизмы синхронизации в Go для защиты общих ресурсов от одновременного доступа.

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

  • RWMutex позволяет нескольким горутинам одновременно читать ресурс (RLock), но блокирует доступ при записи (Lock). Запись эксклюзивна — пока идёт запись, чтение и другие записи блокируются.

Где использовать:

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

Пример использования RWMutex:

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
}

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