2009-04-22 28 views
1

実際の違いとは概念と実装の視点の間にスレッディング/同期化

セモフォア、ミューテックス、モニタ?私たちは、ミューテックスを言うミューテックスを

... OK、私はこのことを理解して... Semophoresは、資源配分のカウンタであると言う

はその何おやっ...バイナリSemophoreあります?

モニターは、オブジェクトのエントリポイントを守る...すなわち、一つのスレッドだけがそれを取得することができ、それがエントリポイントをガードしていますのいずれかを実行することができます?次にmutexは何ですか?これらは概念的オブジェクトに対して複数aceessを可能にするように構成することができるIIRC

+0

dupe:http://stackoverflow.com/questions/760168/when-should-each-thread-synchronization-objects-be-used – finnw

答えて

1

セマフォは、ロック機構です。例えば時間等のアクセス3、一度に4、

ミューテックスは、すなわち、相互排他を確保するためのセマフォの特殊なケースです保護されたリソースにはいつでもアクセスできます。

共有リソースへのアクセスを待っているとき、セマフォやミューテックスでもないが、厳密な順序付けを確保することを注意することが重要です。リソースにアクセスできるようになると、待機中のスレッドはアクセス権を獲得しますが、そのスレッドについてはガーテナーが作成されません。統計的には、最終的にはすべてのスレッドがアクセスする必要があります。

モニターは必ずしも彼らが到着する方法、特定の順序でそれらをキューイングにより、待機中のスレッド/プロセスの優先度を強制します。オペレーティングシステムはモニタの一例であり、単一のプロセスがいつでもCPUを持つことを保証します。

+0

もう1つのことをうまく説明できます。 Semaphoreは、おそらくリソースを割り当てることができないときにスレッド待ちを行うためのデータ構造を保持しています。これは注文する形ではありませんか? もしあなたがMutexと差分b/wモニターとミューテックスの作業についてもっと詳しく説明できれば。 –

+0

セマフォーは、条件変数のみを保持しません。セマフォを持つキューはありません。あなたが考えたいのであれば、キューはOSによって所有され、通常はすべてのブロッキングプロセスが存在する「待機」キューと呼ばれます。セマフォ条件が次のスレッド/プロセスの準備ができている場合、最初に "起動する"プロセスのいずれかがロックを取得する可能性があります。待機中のスレッドには、ロックを取得する機能があります。 http://en.wikipedia.org/wiki/Semaphore_(programming)にはセマフォの簡単な実装があります。 – paxos1977