【发布时间】:2018-11-15 04:30:31
【问题描述】:
当我阅读Mutex 和RwLock 的文档时,我看到的区别如下:
-
Mutex一次只能有一个读者或作者, -
RwLock一次可以有一个作者或多个读者。
如果你这么说,RwLock 似乎总是比Mutex 更好(更少限制),那我为什么要使用它呢?
【问题讨论】:
标签: multithreading rust mutex readwritelock
当我阅读Mutex 和RwLock 的文档时,我看到的区别如下:
Mutex 一次只能有一个读者或作者,RwLock 一次可以有一个作者或多个读者。如果你这么说,RwLock 似乎总是比Mutex 更好(更少限制),那我为什么要使用它呢?
【问题讨论】:
标签: multithreading rust mutex readwritelock
有时在 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,即两个线程同时拥有该类型的 &ptr 是安全的。互斥锁只需要发送数据,因为从概念上讲,您可以将其想象为当您锁定互斥锁时,它会将数据发送到您的线程,而当您解锁它时,数据会发送到另一个线程。
当您的T 仅为Send 而不是Sync 时,请使用Mutex。
RwLock 没有指定的实现,因为它使用系统的实现。有的读写锁会受到writer starvation的影响,而Mutex不会有这种问题。
Mutex 应该在读者可能太多而无法让写者拥有锁时使用。
【讨论】:
Mutex 是一种简单的锁定方法,用于控制对共享资源的访问。
读写锁比互斥锁更复杂。
让我自己总结一下:
【讨论】: