我在Writer-Readers模型中使用boost::shared_mutex
作为同步对象。然而,与没有使用锁相比,它相当慢(在我的测试中:没有任何读卡器,如果没有使用锁,则需要写入500,000个值,如果使用boost::shared_mutex
则需要500毫秒)。这就是为什么我决定考虑像spinlock这样的东西。我想制作一个便携式自旋锁(Windows + Linux)。
InterlockedCompareExchange
,YieldProcessor
,InterlockedDecrement
。更新2016/03/08
我在github上发现了facebook发布的guide和implementation。尚未尝试过。我在这里更新了任何有同样问题且想要推荐的人。
答案 0 :(得分:1)
C ++ 03没有可移植的解决方案,因为C ++ 03没有内存模型,但只需复制目标平台的atomic_flag
实现就可以轻松实现它。
我对给定链接/教程的评论:volatile
不应由应用程序员使用,除非您访问异常内存。我推荐this以及该主题的所有其他文章。应该有一个随时可以使用的库供下载。我不知道它是否只是C ++ 11。
我假设您对多线程,同步和锁定不是很有经验。无论你想要达到什么目的,只要先走标准路线,如果你的表现不够就回来。