我想使用新的标准线程而不是boost:threads但我注意到旧的shared_mutex不可用。什么是一个很好的建议来取代这个功能,并给我一个多读者,单作家锁?
答案 0 :(得分:23)
std::shared_mutex
将成为C ++ 14标准库的一部分。它只是因为没有时间制定提案并彻底讨论它而没有进入C ++ 11。
您仍然可以使用boost::shared_mutex
。在Windows下,如果您使用的是Windows Vista或更高版本,则可以使用Slim Read-Write Locks,它们针对速度和内存消耗进行了优化。
答案 1 :(得分:14)
您应该查看堆栈溢出问题“C++11 equivalent to boost shared_mutex”,特别是以下链接的电子邮件会话:http://permalink.gmane.org/gmane.comp.lib.boost.devel/211180(这解释了C ++ 11委员会对批准shared_mutex的抵制情况)。以下是关于Joe Duffy博客的实验:http://www.bluebytesoftware.com/blog/2009/02/12/ReaderwriterLocksAndTheirLackOfApplicabilityToFinegrainedSynchronization.aspx。
每次考虑读/写锁时,请问自己以下6个问题。如果你能对其中任何一个回答“否”,那么读者/作者锁会使你的程序变得更糟,而不是更好。
const
吗?在我的生活中,我发现shared_mutex
使用的错误比正确用途更多。要正确使用shared_mutex
,必须,您可以在阅读器关键部分内声明共享对象const
,而无需任何编译器投诉。 “消费者”不等同于“完全没有改变数据结构的人。”const
调用共享对象的返回对象。从第一次使用共享对象到最后一次使用共享对象的数据依赖路径上的大部分额外工作都可以移到临界区之外。