【问题标题】:A thread barrier class using only Win32 APIs仅使用 Win32 API 的线程屏障类
【发布时间】:2012-05-09 07:08:53
【问题描述】:

我正在尝试使用线程屏障同步一堆线程。我尝试使用 Boost::barrier 来执行此操作,但遇到了一些链接问题:Compiling Bullet physics and Boost together as static libraries

因此,虽然解决它可能需要一些时间,但我决定继续使用我自己的线程屏障类。屏障机制需要低延迟,因为我将它用于实时模拟器。我在这里查看了一些选项:

Writing a (spinning) thread barrier using c++11 atomics

但是它使用了我认为在 Visual Studio 2010 中还不够成熟的 C++ 原子。我正在尝试仅使用 win32 API 将我自己的线程屏障类组合在一起,我正在研究这个:

http://adilevin.wordpress.com/category/multithreading/

我想知道是否有人有更好的建议。我宁愿没有外部库依赖,现在只使用 C++ 和 win32 api。

【问题讨论】:

  • 如何更好?我查看了链接的互锁/信号量解决方案,似乎没问题。你需要什么?
  • 不如不使用 C++ 原子。最终我为线程使用了 Windows Interlocked API,因为我现在只需要这个类用于 Win32。
  • Windows 8 引入了同步屏障,可以满足您的需求 - msdn.microsoft.com/en-us/library/windows/desktop/… 然而 - 不喜欢 Windows 7 或更早版本:(

标签: c++ multithreading visual-studio


【解决方案1】:

如果您可以直接使用 Win32 API(而且您似乎可以),那么您可以使用 Win32 atomics 滚动您自己的 atomic 模板:

互锁交换 联锁比较交换 等等……

然后,当您在 IDE(Visual Studio 2011?)中对原子有更好的支持时,您可以将自己的模板换成标准库中的模板。

【讨论】:

猜你喜欢
  • 2017-12-05
  • 2016-02-09
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
相关资源
最近更新 更多