Иногда лучше использовать Mutex
над RwLock
в Rust:
RwLock<T>
требуется больше границ для T
, чтобы обеспечить потокобезопасность:
Другими словами, Mutex
- единственная оболочка, которая может синхронизировать T
.Я нашел хорошее и интуитивно понятное объяснение в reddit:
Из-за этих ограничений RwLock требует, чтобы его содержимое было синхронизировано, то есть для двух потоков безопасно иметь & ptr для этоговведите в то же время.Для Mutex требуется только отправка данных, потому что концептуально вы можете думать об этом, как когда вы блокируете Mutex, он отправляет данные в ваш поток, а когда вы его разблокируете, данные отправляются в другой поток.
Используйте Mutex
, если ваш T
равен Send
, а не Sync
.
Предотвращение голодания писателя
RwLock
не имеет указанной реализации, поскольку используетвнедрение системы.Некоторые блокировки чтения-записи могут быть подвержены писательскому голоду , в то время как Mutex
не может иметь такой проблемы.
Mutex
следует использовать, когда у вас слишком много читателей, чтобы позволитьу писателей есть замок.