MinGW-w64ツールチェーンをインストールするときに、Win32スレッドモデルを選択しました。これは、POSIXの対応モデルよりも優れたパフォーマンスを提供することを読んだ後です。私はこの主張を自分でベンチマークする資格はありませんが、 ここにそのソースがあります 。
最初は、このオプションはGCCランタイムの内部動作にのみ影響を与え、コードでC++ 11スレッドの使用を妨げることはないと考えました。これは this answer および this comment 仲間のユーザーrubenvb.
ただし、そうではないようです。 std::thread
サポートは、このMinGW-w64インストールでは存在しないようです。
-std=c++11
以外のオプションを指定せずにコマンドラインからg ++を呼び出しています。
この時点で、次のことがわからない:
thread
ライブラリ、または;std::thread
は私のシナリオで実際にサポートされていますが、直感的ではありません。タイトルの「すぐに使える」部分を強化します。 this answer に示されているように、 mingw-std-threads と呼ばれるライブラリが存在します。ただし、サードパーティのオプションとして、この質問には関係ありません。
それで、今日(2016年5月)の時点で、MinGW-w64はWin32内部スレッドモデルとともにインストールされた場合、std::thread
依存コードをネイティブにサポートしますか?
Win32ネイティブスレッドでMinGW-w64を使用するには、 mingw-std-threads ヘッダーをインストールできます。
そのページで説明したように、これはMinGW-w64がGCCのポートであるが、GCCにはネイティブスレッドのサポートが含まれていないためです。代わりに、GCCインストールは通常、glibcの一部としてgthreadsまたはpthreadsを介してスレッド化を実装します。 MinGW-w64にはglibcのポートは含まれていません。 (代わりに、MSVCランタイムと独自のコードの組み合わせを使用して、穴を埋めます)。
また、そのページで説明されているように、MinGW-w64の最近のバージョンには、Win32ポートのpthread(「winpthreads」)が含まれています。 -w64インストーラー。