为什么要使用std::mutex而不是boost::shared_mutex?

6
我的理解是:std::mutex 无论其他线程想要读取还是写入,都会阻塞它们,而 boost::shared_mutex 则允许多个线程进行读取。

所以我的问题是,我是否应该始终优先选择使用 boost::shared_mutex,以便可能发生并行读取?使用常规的 std::mutex 感觉就像我拒绝了某些可能的读取吞吐量....?

可能是C++11 中的 boost shared_mutex 等价物的重复问题。 - Bathsheba
1
这个链接是相关的。简而言之,与普通锁相比,shared_mutex的锁定成本更高,如果您的读取器仅短时间锁定,则可能导致争用。 - T.C.
有人请把那个“重复”的标签去掉,它显然不是重复的。 - user997112
2
因为std::mutex是C++11标准中的标准,而Boost不是。 - Basile Starynkevitch
尽管很不幸,撤销投票是不可能的,你只能重新打开已关闭的问题。因此,除非再有3个关闭投票并重新打开问题,否则那2个投票将会保留...请忽略它们。(注意:如果您知道类似的问题,值得从自己的问题中链接到它们,并清楚说明它们的区别) - Matthieu M.
显示剩余2条评论
1个回答

7

我不确定它们之间的性能差异,但我的猜测是,由于额外的逻辑,boost::shared_mutex 可能会更慢。此外,根据你有多少读者,你可能会阻塞写线程的时间比你想要的更长,因为它必须等待所有的读访问完成。


4
确实。Boost内部实现包括互斥锁本身和3个条件变量。如果您只需要简单的锁,这是相当繁重的模式。 - Tanuki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接