我何时或为什么要在RwLock上使用Mutex?

时间:2018-06-05 15:52:05

标签: multithreading rust mutex readwritelock

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

  • Mutex一次只能有一个读者或作者,
  • RwLock一次可以有一位作家或多位读者。

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

1 个答案:

答案 0 :(得分:9)

有时在Rust中使用Mutex优于RwLock

RwLock<T>需要T的更多边界是线程安全的:

换句话说,Mutex是唯一可以使T同步的包装器。我在reddit中找到了good and intuitive explanation

  

由于这些边界,RwLock要求其内容为Sync,即两个线程同时具有该类型的&amp; ptr是安全的。 Mutex只需要将数据作为Send,因为从概念上讲,您可以将其视为锁定Mutex时将数据发送到您的线程,当您解锁时,数据会被发送到另一个线程。

MutexT而非Send时,请使用Sync

防止作家饥饿

RwLock没有指定的实现,因为它使用了系统的实现。某些读写锁定可能会writer starvation,而Mutex不会出现此类问题。

当你可能有太多的读者让作家拥有锁时,应该使用

Mutex