便携式Writer-Readers螺旋锁

时间:2016-03-08 08:32:15

标签: c++ boost spinlock

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

  1. 我可以立即使用任何增强包装吗?
  2. This是一个很好的主题,展示了如何在Windows上实现自旋锁。但是我无法在Linux上找到Win32 API的等价物,例如InterlockedCompareExchangeYieldProcessorInterlockedDecrement
  3. 更新2016/03/08

    我在github上发现了facebook发布的guideimplementation。尚未尝试过。我在这里更新了任何有同样问题且想要推荐的人。

1 个答案:

答案 0 :(得分:1)

  1. C ++ 03没有可移植的解决方案,因为C ++ 03没有内存模型,但只需复制目标平台的atomic_flag实现就可以轻松实现它。

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

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