我何时或为什么要在 RwLock 上使用互斥锁?



当我阅读MutexRwLock的文档时,我看到的区别如下:

  • Mutex一次只能有一个读取器或写入器,
  • RwLock一次可以有一个或多个读取器。

当你这样说时,RwLock似乎总是比Mutex更好(更少限制(,那我为什么要使用它呢?

有时最好在 Rust 中使用Mutex而不是RwLock

RwLock<T>需要更多边界才能使T线程安全:

  • Mutex要求T: SendSync
  • RwLock要求TSendSyncSync本身。

换句话说,Mutex是唯一可以使T同步的包装器。我在reddit上找到了一个很好且直观的解释:

由于这些边界,RwLock 要求其内容是同步的,即两个线程同时具有该类型的 &ptr 是安全的。互斥体只要求发送数据,因为从概念上讲,你可以把它想象成当你锁定互斥锁时,它会将数据发送到你的线程,当你解锁它时,数据会被发送到另一个线程。

当您的TSend而不Sync时,请使用Mutex

防止作家饥饿

RwLock没有指定的实现,因为它使用系统的实现。某些读写锁可能会受到写入器匮乏的影响,而Mutex不会出现此类问题。

当您的读者可能太多而无法让作者锁定时,应该使用Mutex

互斥是一种简单的锁定方法,用于控制对共享资源的访问。

  • 同时,只有一个线程可以主打互斥锁,锁定状态的线程可以访问共享资源。
  • 如果另一个线程想要锁定已互斥的资源,则该线程将挂起,直到锁定的线程释放互斥锁。

读写锁比互斥锁更复杂。

  • 使用互斥锁的线程缺乏读取并发性。
  • 当读取操作
  • 较多而写入操作较少时,可以使用读写锁来提高线程读取并发性。

让我自己总结一下:

  • 读写锁的实现比 互斥锁,且性能较差。
  • 读写锁支持多个线程同时读取。互斥锁不支持多线程同时读取,因此读写锁具有高并发性。

相关内容

  • 没有找到相关文章

最新更新