2016-04-19 3 views
-1

NETスレッドのエキスパート.NETでロックと無名ミューテックスを使用するのはいつですか?

ロックはプロセス内のスレッド間で動作し、名前付きミューテックスはプロセス間で動作することがわかりました。しかし、 '名前のないmutex'もスレッド間で動作しているようです(ロックに似ています)。ロックが処理できない名前のないロックの実世界での使用について、誰かがこの光を放つことができますか?

ありがとうございます!

+1

C#のロックはmutexの上に実装され、両方とも同じ目的を果たします。しかし、ミューテックスは低レベルであり、OSのmutexに対する答えを管理しています。 – Saleem

+0

.NETにスレッド同期を実装するには、複数の方法があります。 * lock *キーワードは、Monitorクラスのための簡単な抽象化であり、非常に頻繁にそのまま使用できます。あなたは自由にMutex、Semaphore/Slim、AutoResetEvent、ManualResetEvent/Slim、CountDownEvent、ReaderWriterLock/Slimクラスを持っています。 MSDNのドキュメントと多くのWebページでは、それらの機能をいつ使用するかを知る上で重要なことが重要です。あなたの答えは –

答えて

1

Mutexesは、パラメータとして関数に渡すことができますが、ロックはできません。ミューテックスはMarshalByRefObjectであるので、AppDomains間で渡すこともできます。

プログラム内のAppDomainsをロックしたい場合があります。無名のミューテックスを使用することができるためです。

lockは、いくつかのロジックが適用された低レベルのミューテックスの上に構築され、Mutexは、それらの低レベルのミューテックスの直接管理されたラッパーです。それはどちらか/または状況として考えないでください。代わりにTcpClientWebClientの関係のように考えると、WebClientのすべてを実行するのにTcpClientを使用できますが、上位レイヤの抽象化を使用する方が簡単ですあなたの仕事。

+0

Thnx Scottです。つまり、mutexはロックよりも抽象的です。 –

+0

'mutex'のようにOSのmutexを直接操作していないので、' lock'を「より抽象的」と呼びます。 –

関連する問題