Задать вопрос

Mutex RWMutex отличия?

Здравствуйте, никак не могу понять в чем различия Mutex и RWMutex. Понимаю что RW - это read/write, но в чем реальные отличия от обычного Mutex? Заметила например, что если в цикле вызывать mutex.Lock() - загружается полностью ядро процессора, а если вызывать RWMutex.RLock() - такого нет.
  • Вопрос задан
  • 16494 просмотра
Подписаться 5 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Go-разработчик с нуля + нейросети
    9 месяцев
    Далее
  • Академия Эдюсон
    GO-разработчик
    4 месяца
    Далее
  • Яндекс Практикум
    Продвинутый Go-разработчик
    6 месяцев
    Далее
Решения вопроса 1
RWMutex нужен, когда у нас есть объект, который нельзя параллельно писать, но можно параллельно читать. Например, стандартный тип map.
Перед записью в защищаемый мьютексом объект делается .Lock(), а вызовы .Lock() и .RLock() в других горутинах будут ждать, пока вы не отпустите мьютекс через .Unlock().
Перед чтением защищаемого объекта делается .RLock() и только вызовы .Lock() в других горутинах блокируются, вызовы .RLock() спокойно проходят. Когда отпускаете мьютекс через .RUnlock(), ждущие вызовы .Lock() по-очереди могут забирать мьютекс на себя.
Таких образом обеспечивается параллельное чтение объекта несколькими горутинами, что улучшает производительность.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 75 000 до 120 000 ₽
Polydev Москва
от 150 000 до 250 000 ₽
Уфанет Уфа
от 140 000 до 203 000 ₽