Когда или почему я должен использовать Mutex поверх RwLock? - PullRequest
0 голосов
/ 05 июня 2018

Когда я читаю документацию Mutex и RwLock, я вижу следующее отличие:

  • Mutex банкаиметь только одного читателя или писателя за один раз,
  • RwLock может иметь одного писателя или несколько читателей за один раз.

Когда вы говорите таким образом, RwLock кажетсявсегда лучше (менее ограничен), чем Mutex, зачем мне тогда его использовать?

1 Ответ

0 голосов
/ 05 июня 2018

Иногда лучше использовать Mutex над RwLock в Rust:

RwLock<T> требуется больше границ для T, чтобы обеспечить потокобезопасность:

Другими словами, Mutex - единственная оболочка, которая может синхронизировать T.Я нашел хорошее и интуитивно понятное объяснение в reddit:

Из-за этих ограничений RwLock требует, чтобы его содержимое было синхронизировано, то есть для двух потоков безопасно иметь & ptr для этоговведите в то же время.Для Mutex требуется только отправка данных, потому что концептуально вы можете думать об этом, как когда вы блокируете Mutex, он отправляет данные в ваш поток, а когда вы его разблокируете, данные отправляются в другой поток.

Используйте Mutex, если ваш T равен Send, а не Sync.

Предотвращение голодания писателя

RwLock не имеет указанной реализации, поскольку используетвнедрение системы.Некоторые блокировки чтения-записи могут быть подвержены писательскому голоду , в то время как Mutex не может иметь такой проблемы.

Mutex следует использовать, когда у вас слишком много читателей, чтобы позволитьу писателей есть замок.

...