使用 Win32 线程模型时,MinGW-w64 是否支持开箱即用的 std::thread?

Does MinGW-w64 support std::thread out of the box when using the Win32 threading model?

我在安装 MinGW-w64 工具链时选择了 Win32 线程模型,在阅读后发现它提供了比 POSIX 对应的更好的性能。我自己没有资格对这个声明进行基准测试,但是 here's a source for it.

起初我认为这个选项只会影响 GCC 运行时的内部工作,而不会阻止我在我的代码中使用 C++11 线程,基于 this answer and 其他用户 [=31] =]rubenvb.
然而,情况似乎并非如此。 std::thread 支持似乎是 non-existent 在此 MinGW-w64 安装中。

我正在从命令行调用 g++,除了 -std=c++11.

之外没有其他选项

此时我不确定是否:

我加强了标题中的"out of the box"部分。存在一个名为 mingw-std-threads, as presented in this answer 的库。但是,作为third-party选项,与本题无关。

那么,截至今天(2016 年 5 月),MinGW-w64 是否原生支持 std::thread 依赖代码,当安装了 Win32 内线程模型时?

要将 MinGW-w64 与 Win32 本机线程一起使用,您可以安装 mingw-std-threads headers。

如该页面所述,这是因为 MinGW-w64 是 GCC 的端口,但 GCC 不包含任何本机线程支持。相反,GCC 安装通常通过 gthreads 或 pthreads 作为 glibc 的一部分来实现线程。 MinGW-w64 不包含 glibc 端口。 (相反,它使用 MSVC 运行时的组合,加上自己的代码来填补漏洞)。

同样如该页面所述,最新版本的 MinGW-w64 确实包含 pthreads 的 Win32 端口 ("winpthreads"),这解释了为什么您可以通过选择 "out of the box" 让线程工作 "out of the box" =19=] 来自 MinGW-w64 安装程序的模型。