当我阅读Mutex
和RwLock
的文档时,我看到的区别如下:
Mutex
一次只能有一个读者或作者,RwLock
一次可以有一位作家或多位读者。当你这样说时,RwLock
似乎总是比Mutex
更好(更少限制),为什么我会使用它呢?
答案 0 :(得分:9)
有时在Rust中使用Mutex
优于RwLock
:
RwLock<T>
需要T
的更多边界是线程安全的:Mutex
requires T: Send
为Sync
,RwLock
requires T
to be Send
and Sync
本身就是Sync
。换句话说,Mutex
是唯一可以使T
同步的包装器。我在reddit中找到了good and intuitive explanation:
由于这些边界,RwLock要求其内容为Sync,即两个线程同时具有该类型的&amp; ptr是安全的。 Mutex只需要将数据作为Send,因为从概念上讲,您可以将其视为锁定Mutex时将数据发送到您的线程,当您解锁时,数据会被发送到另一个线程。
当Mutex
仅T
而非Send
时,请使用Sync
。
RwLock
没有指定的实现,因为它使用了系统的实现。某些读写锁定可能会writer starvation,而Mutex
不会出现此类问题。
Mutex
。