web-dev-qa-db-ja.com

Win32スレッドモデルを使用する場合、MinGW-w64は標準でstd :: threadをサポートしていますか?

MinGW-w64ツールチェーンをインストールするときに、Win32スレッドモデルを選択しました。これは、POSIXの対応モデルよりも優れたパフォーマンスを提供することを読んだ後です。私はこの主張を自分でベンチマークする資格はありませんが、 ここにそのソースがあります

最初は、このオプションはGCCランタイムの内部動作にのみ影響を与え、コードでC++ 11スレッドの使用を妨げることはないと考えました。これは this answer および this comment 仲間のユーザーrubenvb.
ただし、そうではないようです。 std::threadサポートは、このMinGW-w64インストールでは存在しないようです。

-std=c++11以外のオプションを指定せずにコマンドラインからg ++を呼び出しています。

この時点で、次のことがわからない:

  • rubenvbが間違っていたため、C++ 11に依存するコードをコンパイルするには、POSIXスレッドモデルの下にMinGW-w64を実際にインストールする必要があります。 threadライブラリ、または;
  • 私はそれをすべて完全に誤解していた、または
  • std::threadは私のシナリオで実際にサポートされていますが、直感的ではありません。

タイトルの「すぐに使える」部分を強化します。 this answer に示されているように、 mingw-std-threads と呼ばれるライブラリが存在します。ただし、サードパーティのオプションとして、この質問には関係ありません。

それで、今日(2016年5月)の時点で、MinGW-w64はWin32内部スレッドモデルとともにインストールされた場合、std::thread依存コードをネイティブにサポートしますか?

21
Marc.2377

Win32ネイティブスレッドでMinGW-w64を使用するには、 mingw-std-threads ヘッダーをインストールできます。

そのページで説明したように、これはMinGW-w64がGCCのポートであるが、GCCにはネイティブスレッドのサポートが含まれていないためです。代わりに、GCCインストールは通常、glibcの一部としてgthreadsまたはpthreadsを介してスレッド化を実装します。 MinGW-w64にはglibcのポートは含まれていません。 (代わりに、MSVCランタイムと独自のコードの組み合わせを使用して、穴を埋めます)。

また、そのページで説明されているように、MinGW-w64の最近のバージョンには、Win32ポートのpthread(「winpthreads」)が含まれています。 -w64インストーラー。

19
M.M