2016-05-21 1 views
14

私はMinGW-w64ツールチェーンをインストールする際にWin32スレッドモデルを選択しましたが、それはPOSIXのものよりも優れたパフォーマンスを提供します。私はこの主張をベンチマークする資格はありませんが、here's a source for itです。Win32スレッドモデルを使用する場合、MinGW-w64はstd :: threadをサポートしていますか?

最初に私は、仲間のユーザーrubenvbによってthis answerthis commentに基づいて私のコードでC++ 11個のスレッドを、使用してから私を防止していない間、このオプションは、GCCランタイムの内部動作に影響を与えるだろうと思いました。
しかし、これはそうではないようです。 std::threadのサポートは、このMinGW-w64インストールでは存在しないようです。

-std=c++11以外のオプションを指定しないでコマンドラインからg ++を呼び出しています。 rubenvbが間違っていた、そしてそれが依存する私のコードをコンパイルするために、POSIXスレッドモデルの下でのMinGW-W64をインストールするには、実際には必要だ

  • :私はかどうかわからないんだけど、この時点で

    C++ 11 threadライブラリ、または、

  • 私はそれを完全に誤解しました。
  • std::thread実際に私のシナリオではサポートされていますが、それは直感的ではありません。

タイトルの「out of the box」部分を補強します。 this answerに示すように、mingw-std-threadsと呼ばれるライブラリが存在します。ただし、第三者の選択肢として、この質問には関係ありません。

現在、Win32の内部スレッドモデルでインストールされたMinGW-w64は、NativeDellyのstd::threadコードに依存していますか?

+0

リンクしているときにmingw-std-threadsをインストールすると約30秒かかります –

+0

@ M.M ...提案をいただき、ありがとうございました。この質問は、主に好奇心やカノニティーのためです。情報はさまざまな情報源の間で異なるようです。 –

+0

私の答えも私のコメントも間違っていません。それらはmingw-std-threadsライブラリが利用できなかった時に書かれました(少なくとも私はそれを知らなかった)。内部スレッドモデルがwin32に設定されているGCCは、C++ 11スレッド機能をサポートしていません。リンクした私の答えはちょうどこれを言う。私のコメントは、C++ 11スレッドのサポートについては言及していません。代わりに、内部スレッドモデルとしてwin32/posixで構築されたGCCを使って、pthreadやwin32スレッドに関連する関数を呼び出すことができます。これらは2つの非常に異なるトピックです。 – rubenvb

答えて

12

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

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

MinGW-w64の最近のバージョンには、Win32ポートのpthreadsが含まれているため、MinGW-w64の "pthread"モデルを選択することで、 w64インストーラ。

関連する問題