2016-05-21 48 views
14

在安装MinGW-w64工具链时,我选择了Win32线程模型,因为它提供的性能优于POSIX。我没有资格自己对此声明进行基准测试,但here's a source for it使用Win32线程模型时,MinGW-w64是否支持std :: thread开箱即用?

起初我以为这个选项只会影响到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月)开始,MinGW-w64 nativelly是否支持std::thread取决于代码,与Win32内部线程模型一起安装?

+0

安装mingw-std-threads链接到,工作并需要大约30秒 –

+0

@ M.M ...感谢您的建议,我已经这样做了。然而,这个问题主要是出于好奇/ canonicity的缘故。信息似乎在不同来源之间出现分歧。 –

+0

我的回答和我的评论都不对。它们是在mingw-std-threads库不可用的时候编写的(至少我不知道它)。其内部线程模型设置为win32的GCC不支持C++ 11线程功能。我与你联系的答案正是这样说的。另一方面,我的评论并不提及C++ 11线程支持。相反,它使用以win32/posix构建的GCC作为其内部线程模型来处理调用pthread或win32线程相关函数,所有这些都可以像预期的那样工作。这是两个非常不同的话题。 – rubenvb

回答

12

要在Win32本地线程中使用MinGW-w64,还必须安装mingw-std-threads标头。

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

也如该页所述,MinGW-w64的最新版本确实包含了一个pthreads的Win32端口,这就解释了为什么你可以通过从MinGW-w64中选择“pthread” w64安装程序。

相关问题