2016-05-21 73 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安裝程序。

相關問題