Mutex RWMutex отличия?

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

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

Войти через центр авторизации
Похожие вопросы