0

重複の可能性:
g ++では、C ++ 11スレッドモデルはバックグラウンドでpthreadを使用していますか?

LinuxシステムOpenMPで実装されているところから読んだことがありますが、私にはかなり異なっているように見えます。スレッドPThreads間の(相対的な)類似性を考慮して、私は疑問に思いました、C++11PThreads

スレッドがまたはでまたは他のマルチスレッドライブラリC++11を使用して実装されているかどうかを誰かが知っていますか?PThreadsgccclang

4

1 に答える 1

1

C++ 2011 のマルチスレッドには複数の部分があります。

  1. std::threadstd::mutex、などの高レベルの抽象化std::condition_variable。これらの抽象化は、libc++ (clang のネイティブ ライブラリ) と libstdc++ (gcc のネイティブ ライブラリ) の両方の pthread に関して実装されます。libstdc++ はgthr.h、シングル スレッド実装のスタブ化などに使用できるインダイレクション ( ) を使用します。これは、さまざまな同期クラスのソースから明らかです。
  2. 低レベルの同期機能、つまりアトミックやさまざまなメモリ可視性制御は、pthread からは利用できません。gcc と clang の両方が、おそらく適切な命令を作成するコンパイラ ビルドインを使用してこれらを実装しているようです。ただし、これらのいずれの実際のコードも追跡していません。
  3. ライブラリに実装するだけでは不十分です。コンパイラは、同期プリミティブ間で命令の順序を変更しないようにする必要があり、適切な場所で値を表示できるようにする必要があります。
于 2012-10-09T21:12:30.827 に答える