BOOST:递归shared_mutex?

时间:2010-07-22 12:50:52

标签: c++ boost-thread

看起来Boost的shared_mutex是非递归的..反正有这个吗? (没有重新实现整个东西)

5 个答案:

答案 0 :(得分:7)

查看this threadexcellent explanation为什么shared_mutex一般来说是个坏主意。因此,如果您不同意recursive_mutex也是个坏主意,那么只需使用它而不需要任何 shariness ,因为它无法为您带来任何性能提升。即使有任何重大变化,您也会收到更清晰的代码。

我试图在我的项目中使用shared_mutex来锁定高度竞争的地图,因为许多线程经常读取数据而很少修改它。收到的表现结果有点差

答案 1 :(得分:1)

我以前亲自走过这条路。简单的答案是否定的,没有shared_recursive_mutex。

我真的不同意其他人会告诉你的关于递归互斥体通常是个坏主意的事情,它当然可以节省一些时间并防止出现一些错误。但是,如果您不想实现自己的shared_recursive_mutex,则必须坚持使用非递归互斥锁。这不是那么糟糕。

答案 2 :(得分:1)

我部分不同意Andy认为shared_mutex是一个坏主意,因为它取决于你的设计,即你如何在你的程序中使用它。我相信,如果你经常使用共享互斥锁进行频繁读取,那么它可以为你提供更高效的性能,而不是使用简单的互斥锁来获得更频繁的锁,以便用罕见的文字进行阅读。所以shared_mutex是一种长期同时做某事的方法。在这种情况下,我认为长锁并不是一个糟糕的设计。

你支持我还是我错了?

答案 3 :(得分:0)

boost :: recursive mutex是独占的。我想你需要扩展shared_mutex。您可以将当前线程ID保留在一个集合中,并检查它是否存在于提供锁定功能的集合中。

答案 4 :(得分:-3)

在这些情况下,您必须使用shared_ptr。将你的互斥锁放在shared_ptr中,它会对你的互斥锁进行重新计数,这将为你提供相似的结果。