当我阅读 and 的文档时Mutex
,RwLock
我看到的区别如下:
Mutex
一次只能有一个读者或作者,RwLock
一次可以有一个作家或多个读者。
当您这样说时,RwLock
似乎总是比 更好(更少限制)Mutex
,那我为什么要使用它呢?
有时在 Rust中使用 a Mutex
over an会更好:RwLock
RwLock<T>
需要更多界限T
才能实现线程安全:Mutex
需要T: Send
Sync
,_RwLock
需要T
是Send
并且 Sync
是 自己Sync
.换句话说,Mutex
是唯一可以同步的包装器T
。我在 reddit 中找到了一个很好且直观的解释:
由于这些限制,RwLock 要求其内容为 Sync,即两个线程同时拥有该类型的 &ptr 是安全的。互斥锁只需要发送数据,因为从概念上讲,您可以将其想象为当您锁定互斥锁时,它会将数据发送到您的线程,而当您解锁它时,数据会发送到另一个线程。
Mutex
当你的T
is onlySend
和 not时使用Sync
。
RwLock
没有指定的实现,因为它使用系统的实现。一些读写锁可能会受到writer starvation的影响,而Mutex
不会出现这种问题。
Mutex
当您可能有太多读者而无法让作者拥有锁时应该使用。
互斥锁是一种简单的锁定方法,用于控制对共享资源的访问。
读写锁比互斥锁更复杂。
让我自己总结一下: