2016-03-08 55 views
1

我使用boost::shared_mutex作为Writer-Readers模型中的同步对象。然而,与没有使用的锁相比,速度相当慢(在我的测试中:没有任何读卡器,要写500,000个值,如果不使用锁,需要100毫秒,如果使用boost::shared_mutex,则需要约500毫秒)。这就是为什么我决定考虑类似自旋锁的原因。我想制作一个便携式自旋锁(Windows + Linux)。Portable Writer -Readers自旋锁

  1. 是否有任何可以立即使用的提升包装?
  2. This是一个很好的话题,展示了如何在Windows上实现螺旋锁。但我无法找到在Linux上的Win32 APIs的等效物,例如InterlockedCompareExchangeYieldProcessor,InterlockedDecrement

更新2016年3月8日

我发现了一个guide和被Facebook在GitHub上发布了implementation。还没有尝试过。我在这里更新了任何有同样问题并可能想参考的人。

+2

如果您的作者多于读者,则使用共享互斥是愚蠢的。它们适用于您希望快速读取读写速度的情况,以减少相对较少的写入操作为代价。尝试使用普通的互斥体。 –

+0

@DavidSchwartz我只有1位作家和16位读者。 –

+0

那你为什么不介意它没有读者呢? –

回答

1
  1. 存在对C++ 03,因为C++ 03没有记忆模式,但你可以通过只复制你的目标平台的atomic_flag实现非常容易地实现它没有便携式解决方案。

  2. 我对给定链接/教程的评论:volatile不应该由应用程序员使用,除非您访问不寻常的内存。我建议this和该主题的所有其他文章。应该有一个随时可用的库供下载。我不知道它是否仅仅是C++ 11。

  3. 我假设你对多线程,同步和锁定不是很有经验。无论你想达到什么目标,只要先走标准路线,如果你的表现还不够好,就会回来。

+0

你的假设是正确的。我是一个新手。我想我最好坚持共享互斥体,先看看真实环境中的性能。谢谢你,先生! –