【问题标题】:Why ever use std::mutex instead of boost::shared_mutex?为什么要使用 std::mutex 而不是 boost::shared_mutex?
【发布时间】:2014-08-11 10:34:29
【问题描述】:

我的理解是:std::mutex 会阻塞其他线程,无论他们想读还是写,而boost::shared_mutex 将允许多次读取。

所以我的问题是,我是否应该总是更喜欢boost::shared_mutex 而不是普通的std::mutex 以允许发生并行读取?使用普通的std::mutex 感觉就像我在否认一些可能的读取吞吐量......?

【问题讨论】:

  • 即暂时使用 Boost。如果它被纳入该标准,可能会迁移到 C++14。
  • This 是相关的。简而言之,shared_mutex 的锁定成本比普通的要高,如果您的读者只锁定很短的时间,这可能会成为争论的根源。
  • @Bathsheba 不完全是一个骗局。这个问题询问是否有任何理由更喜欢普通互斥锁而不是共享互斥锁。该问题询问是否有标准化的shared_mutex
  • 因为std::mutex 在 C++11 中是标准的,但 Boost 不是。

标签: c++ multithreading boost


【解决方案1】:

我无法谈论他们两个之间的性能,但我的猜测是因为额外的逻辑boost::shared_mutex 可能会更慢。除此之外,根据您拥有的阅读器数量,您可能会阻塞写入线程的时间比您想要的要长,因为它必须等到所有读取访问完成。

【讨论】:

  • 是的。 boost 内部实现包括互斥锁本身和 3 个条件变量。如果您需要简单的锁定,则相当繁重的模式。
猜你喜欢
  • 1970-01-01
  • 2021-12-27
  • 2015-03-04
  • 2016-09-07
  • 2013-08-27
  • 1970-01-01
  • 2016-11-21
  • 2019-11-07
  • 1970-01-01
相关资源
最近更新 更多