【问题标题】:std::thread, posix threads, and win32 threads in MinGW-W64MinGW-W64 中的 std::thread、posix 线程和 win32 线程
【发布时间】:2014-08-13 02:08:31
【问题描述】:

我正在使用 MinGW_W64,我无法决定如何使用“线程”选项继续前进。我可以使用 posix 线程或 win32 线程。到目前为止,我一直在使用 C++11 的“std::thread”进行线程处理(这需要 posix 线程选项),我真的很喜欢接口以这种方式做事。但是,我从多个来源了解到 posix 线程比 win32 线程慢得多,而性能对我来说是一个大问题。

我的项目最终将是多平台的,但目前我的主要开发机器运行的是 Windows 7。

我的问题是:MinGW_W64 的 posix 线程是否比 win32 线程慢?如果是这样,我将如何编写一个包装器,让我可以使用类似 std::thread 的接口但在后台使用 win32 线程(或者如果有人已经编写了这样的包装器,则可以找到这样的包装器)?

【问题讨论】:

  • pthreads 在 Windows 上可能是 pthreads-win32,它只是公开了 pthread API,但在底层使用了 win32 线程。
  • 另外,如果您对选项持开放态度,VS2013+ 完全实现了 C++11 的std::thread 规范,并使用本机线程、互斥体、条件变量等。我是 乞求我的雇主允许我们离开 VS2005/VS2010,这是原因之一(那和 C++11,即使是 MS 可怜的实现,在任何一天都比 C++98 好周和周日两次)。
  • 我现在实际上正在使用 VS2013,但出于多种原因我希望切换(首先,我无法在堆栈上分配对齐的类)。
  • 这些来源中是否有任何解释为什么或在什么情况下“POSIX 线程较慢”?从表面上看,这似乎不合理;一个线程就是一个线程,无论如何,CPU 都以同样的方式处理指令。
  • 好吧,既然您阅读了“多个来源”(URL?) POSIX 线程比 win32 线程慢,请检查这些来源以获得精确的测量或基准来证明他们的主张。作为记录,我可以想象不同的线程实现在启动期间和线程间通信(互斥体等)的性能上有所不同,但内部的“正常”操作不应该有所不同。

标签: c++ multithreading winapi c++11 mingw-w64


【解决方案1】:

MinGW 已经有一个轻量级的 std::thread 和同步原语本机实现,在纯 WINAPI 中实现: https://github.com/meganz/mingw-std-threads

它是一个仅包含标头的库,应该适用于任何具有适当 C++11 支持的 MinGW 版本。

【讨论】:

    猜你喜欢
    • 2013-06-19
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2019-06-27
    • 2012-04-24
    相关资源
    最近更新 更多