Portable Writer -Readers自旋锁
我使用boost::shared_mutex
作为Writer-Readers模型中的同步对象。然而,与没有使用的锁相比,速度相当慢(在我的测试中:没有任何读卡器,要写500,000个值,如果不使用锁,需要100毫秒,如果使用boost::shared_mutex
,则需要约500毫秒)。这就是为什么我决定考虑类似自旋锁的原因。我想制作一个便携式自旋锁(Windows + Linux)。Portable Writer -Readers自旋锁
- 是否有任何可以立即使用的提升包装?
-
This是一个很好的话题,展示了如何在Windows上实现螺旋锁。但我无法找到在Linux上的Win32 APIs的等效物,例如
InterlockedCompareExchange
,YieldProcessor
,InterlockedDecrement
。
更新2016年3月8日
我发现了一个guide和被Facebook在GitHub上发布了implementation。还没有尝试过。我在这里更新了任何有同样问题并可能想参考的人。
存在对C++ 03,因为C++ 03没有记忆模式,但你可以通过只复制你的目标平台的
atomic_flag
实现非常容易地实现它没有便携式解决方案。我对给定链接/教程的评论:
volatile
不应该由应用程序员使用,除非您访问不寻常的内存。我建议this和该主题的所有其他文章。应该有一个随时可用的库供下载。我不知道它是否仅仅是C++ 11。我假设你对多线程,同步和锁定不是很有经验。无论你想达到什么目标,只要先走标准路线,如果你的表现还不够好,就会回来。
你的假设是正确的。我是一个新手。我想我最好坚持共享互斥体,先看看真实环境中的性能。谢谢你,先生! –
如果您的作者多于读者,则使用共享互斥是愚蠢的。它们适用于您希望快速读取读写速度的情况,以减少相对较少的写入操作为代价。尝试使用普通的互斥体。 –
@DavidSchwartz我只有1位作家和16位读者。 –
那你为什么不介意它没有读者呢? –