質問

たとえば、 c++0xインターフェース

これらのもの(cv、mutex、lock)のどれをいつ使用するかを理解するのに苦労しています。誰か説明したり、リソースを示したりしてもらえますか?

前もって感謝します。

役に立ちましたか?

解決

あなたはを参照してください]ページで、「ミューテックス」は、実際の低レベルプリミティブの同期です。あなたは、ミューテックスを取得し、それを解放し、1つのスレッドのみ(したがって、それが同期プリミティブである)、任意の単一の時点でそれを取ることができます。再帰的なmutexがのと同じのスレッドを複数回で撮影することができます一つであり、そしてそれは他の人がそれを取ることができる前に、同じスレッドで何度としてリリースする必要があります。

A「ロック」ここデストラクタでそのコンストラクタおよびリリースそれにmutexを取るだけのC ++ラッパークラスです。これは、C ++のスコープのための同期を確立するのに便利です。

状態変数は「シグナル」機構を持つロックを組み合わせプリミティブ同期の/より高度な高レベルの形態です。スレッドは、リソースが利用可能になるのを待つ必要がある場合に使用されます。スレッドは、CVに「待つ」ことができ、その後、リソースのプロデューサーは、「信号」変数は、その場合にはCVを待つスレッドが通知を受けることができ、実行を継続することができます。ミューテックスは、スレッドが別のスレッドがそれを知らせるために望んでいると同時に、CV上で待機するように起動する競合状態を避けるために、CVと組み合わされ、シグナルが配信されたり失われかを制御できない。

他のヒント

私は C++0x についてはあまり詳しくないので、この回答は割り引いて聞いてください。

再:ミューテックス vs.ロック:あなたが投稿したドキュメントから、それは次のように見えます mutex は OS ミューテックスを表すオブジェクトですが、 lock を容易にするためにミューテックスを保持するオブジェクトです。 RAIIパターン.

条件変数は、ブロッキング/シグナリング メカニズム (signal+wait) を相互排他メカニズムに関連付けるための便利なメカニズムですが、システム プログラマが condvar と mutex の間の関連付けを選択できるように、OS 内でそれらを切り離しておきます。(同時にアクセスされるオブジェクトの複数のセットを処理する場合に役立ちます) Rob Krten にはいくつかの機能があります condvarsについての良い説明 彼のオンライン章の一つで QNX で予約する.

一般的な参考文献に関しては、次のとおりです。 この本 (まだ出ていない)面白そうです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top