似乎Boost的shared_mutex是非递归的。有没有反正呢? (无需重新执行整个内容)BOOST:递归shared_mutex?
回答
在这些情况下,您必须使用shared_ptr。把你的互斥量放在一个shared_ptr中,它会对你的互斥量进行计数,这会给你带来相似的结果。
boost :: weak_ptr与boost :: shared_mutex有什么关系? – 2010-07-22 15:21:09
@Sam抱歉,我想到了一些东西,并完全写了一个。我编辑了我的帖子,使其更清晰/更正。 – Gianni 2010-07-22 15:30:09
'shared_ptr'与这个问题无关。问题不在于共享物理对象(哪个'shared_ptr'允许),而是共享和索引锁的拥有权(同步概念而不是C++对象)。 – 2011-01-03 10:10:26
boost :: recursive mutex是排他性的。我想你需要扩展shared_mutex。您可以将当前线程ID保存在一个集合中,并检查它是否存在于提供锁定的函数集合中。
我以前一直在走这条路。简单的答案是否定的,没有shared_recursive_mutex。
我并不完全同意其他人会告诉你递归互斥体如何通常是一个坏主意,它肯定可以节省一些时间并避免一些错误。但是,如果你不想实现你自己的shared_recursive_mutex,你必须坚持使用非递归互斥体。也不是那么坏。
看一看this thread和这excellent explanation为什么shared_mutex
是一般的坏主意。所以如果你不同意recursive_mutex
也是不好的想法,只需使用它而不需要任何潇洒因为它不能给你任何性能提升。你将会得到更清洁的代码而不会有任何重大改变。
我试图在我的项目中使用shared_mutex来锁定高度争用的地图,当很多线程经常读取数据并且很少修改它时。收到了更差的性能结果
是的。确实非常有趣的分析。谢谢! – GabiMe 2011-02-02 21:02:08
我部分不同意安迪,shared_mutex是一个坏主意,因为它取决于您的设计,即如何在程序中使用它。我相信,如果你使用共享互斥锁进行长时间的频繁读取,它可以为你带来更高效的性能,比如果你使用简单的互斥锁来简化更频繁的读取罕见着作的锁定。所以shared_mutex是一种同时做很长时间的方法。而且我不认为在这种情况下长锁是不好的设计。
你支持我还是我错了?
- 1. std :: lock()相当于boost :: shared_mutex?
- 2. boost :: shared_mutex vs boost :: mutex多线程写入?
- 3. Boost recursive_wrapper递归
- 4. Boost lambda递归?
- 5. 错误:使用删除函数boost :: shared_mutex :: shared_mutex
- 6. boost ::变异递归问题
- 7. 如何解锁boost :: upgrade_to_unique_lock(由boost :: shared_mutex生成)?
- 8. C++ Boost递归变体重载apply_visitor
- 9. Boost:图递归遍历和图副本
- 10. Boost递归变体以及模板C++
- 11. C++的boost ::精神::气递归规则
- 12. 解析boost :: spirit递归结构
- 13. Boost :: asio和嵌套/递归service.run()/ run_one()
- 14. boost :: shared_mutex多读卡器/单写入器互斥锁
- 15. 为什么要调用boost :: thread :: shared_mutex块的lock_upgrade()?
- 16. 为什么C++ 0x标准委员会拒绝boost :: shared_mutex?
- 17. Boost - shared_mutex必须是相同的实例吗?
- 18. C++ shared_mutex实现
- 19. Java - SubSet和递归递归递归图
- 20. 递归0s和1s递归
- 21. Java中的递归递归
- 22. 递归与VS.尾递归
- 23. asp.net mvc递归html递归
- 24. 我如何递归递归?
- 25. 递归与非递归
- 26. 升压shared_mutex析构函数
- 27. 并行快速排序:使用Boost Bind递归?
- 28. 列表目录文件递归与boost :: filesystem
- 29. 递归的boost ::变种类型不与 “-std = C++ 11 -stdlib =的libC++”
- 30. 当我使用boost建立绝对路径时无限递归
在走下这条道路之前,您可能需要阅读关于递归互斥体的[别人认为](http://www.zaval.org/resources/library/butenhof1.html)。 – 2010-07-22 13:03:42
你看过boost:recursive_mutex吗? – 2010-07-22 15:22:45
是的,但不共享 – GabiMe 2010-07-24 23:13:29