用于C ++的用户模式同步库

时间:2009-11-27 15:30:57

标签: c++ multithreading synchronization

有没有人知道C ++的Windows用户模式线程同步库(利用自旋锁/原子操作)?我只需要互斥锁(〜关键部分),但条件变量是一个加号。

3 个答案:

答案 0 :(得分:3)

你赢了32:http://msdn.microsoft.com/en-us/library/ms682530%28VS.85%29.aspx。您可以使用此库here完整地了解同步。

答案 1 :(得分:2)

正如Patrice所说,你可以将win32库用于用户模式(临界区包含一个将旋转的spincount)。

Visual Studio 2010 Beta2 / Win7 x64包含并发运行时(ConcRT),它基于用户模式计划线程,允许ConcRT检测内核阻塞并切换到用户模式下的另一个任务(开销低于典型的上下文交换)。因此,例如,如果您在ConcRT中的任务中使用boost :: thread及其条件变量和互斥锁,则这些将在用户模式下处理。

您还可以使用英特尔的线程构建模块,其中包含一些用户模式自旋锁。没有条件变量。

Anthony Williams在他的网站上有一个std :: thread for sale的实现,包括来自C ++ 0x的原子库,如果你真的想构建自己的自旋锁。

一般情况下,除非你做的非常细粒度的同步,你保证不会有很多争用,我鼓励你明智地使用自旋锁,他们倾向于“旋转”,因此消耗系统cpu资源......

-Rick

答案 2 :(得分:1)

感谢您的回答。事实证明,基于我对线程库大小的期望是一个坏主意,并且基于InterlockedExchange编写自己的同步代码非常简单。我的自旋锁代码比Win32关键部分的性能提高了约20%(我的意思是真正的应用程序性能,而不是综合测试):)