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

时间:2016-05-21 04:23:51

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

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

起初我认为这个选项只会影响GCC运行时的内部工作,同时不会阻止我在代码中使用C ++ 11线程,基于this answerthis comment用户 rubenvb
但是,情况似乎并非如此。此MinGW-w64安装中似乎不存在std::thread支持。

我从命令行调用 g ++ ,除了-std=c++11之外没有任何选项。

此时我不确定是否:

  • rubenvb 是错误的,实际上有必要在POSIX线程模型下安装MinGW-w64,以便编译依赖于C ++ 11 thread库的代码,或者;
  • 我完全误解了这一切,或者;
  • std::thread在我的场景中实际上是支持的,它只是不直观。

我强化标题中的“开箱即用”部分。存在一个名为mingw-std-threads的库,如this answer中所示。但是,作为第三方选项,它与此问题无关。

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

1 个答案:

答案 0 :(得分:15)

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

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

同样如该页面所述,MinGW-W64的最新版本包含一个pthreads的Win32端口(" winpthreads"),这解释了为什么你可以让线程工作"开箱即用& #34;通过选择" pthread"来自MinGW-w64安装程序的模型。