有没有人知道用于C++的Windows用户模式线程同步库(利用自旋锁/原子操作)?我只需要互斥锁(~临界区),但条件变量会更好。
发布于 2009-11-28 21:11:46
谢谢你的回答。事实证明,将我对线程库大小的期望建立在boost的基础上并不是一个好主意,而是基于InterlockedExchange编写您自己的同步代码
发布于 2009-11-27 23:42:46
你有win 32之一:http://msdn.microsoft.com/en-us/library/ms682530%28VS.85%29.aspx。您已经完整地解释了如何使用这个库here进行同步。
发布于 2009-11-28 04:57:38
正如帕特里斯所说,你可以在用户模式下使用win32库(关键部分包含一个旋转的spin can )。
Visual Studio2010 Beta2 / Win7 x64包含并发运行时(ConcRT),它构建在用户模式调度线程上,允许ConcRT检测内核阻塞并切换到用户模式下的另一个任务(与典型的上下文交换相比,开销更低)。因此,例如,如果您在ConcRT中的任务上使用boost::thread及其条件变量和互斥锁,则这些将在用户模式下处理。
您还可以使用英特尔的线程构建块,其中包含一些用户模式自旋锁。没有条件变量。
Anthony Williams在他的网站上有一个std::thread for sale的实现,其中包括来自C++0x的原子库,如果你真的想构建自己的自旋锁。
一般来说,除非你正在做非常细粒度的同步,保证不会有太多的争用,否则我鼓励你明智地使用自旋锁,它们往往会“旋转”,并因此消耗系统cpu资源……
-Rick
https://stackoverflow.com/questions/1809364
复制相似问题