MSDNの記事MutexClassは(コード例へのコメントで)次のように述べています。
Monitorとは異なり、MutexはWaitHandle.WaitAllおよびWaitAnyで使用でき、AppDomainの境界を越えて渡すことができます。
ミューテックスが管理されていないリソースを採用しているということですか?
では、なぜMutexの使用法に関するMSDNコード例ではDispose()を使用しないのでしょうか。
MSDNの記事MutexClassは(コード例へのコメントで)次のように述べています。
Monitorとは異なり、MutexはWaitHandle.WaitAllおよびWaitAnyで使用でき、AppDomainの境界を越えて渡すことができます。
ミューテックスが管理されていないリソースを採用しているということですか?
では、なぜMutexの使用法に関するMSDNコード例ではDispose()を使用しないのでしょうか。
Mutex およびその他の多くの同期オブジェクトは、さまざまなカーネル オブジェクト ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.85).aspx ) のラッパーであるため、はい、使用します内部の管理されていないリソース。
それらを使い終わったら呼び出す必要がありますが、プロセスが終了したとき、またはファイナライザーが起動したときに解放されるため(破棄していない場合)、例を簡単にするために、それらは適切に行われ.Dispose
なかったと思います。Dispose
MSDN からの WaitHandles に関するメモ:
WaitHandle への最後の参照を解放する前に、必ず Dispose を呼び出してください。 そうしないと、使用しているリソースが使用できなくなります。 ガベージ コレクタが WaitHandle オブジェクトの Finalize メソッドを呼び出すまで解放されます。
はい、実装Mutex
するを継承するため、破棄する必要があります。WaitHandle
IDisposable
内部的には、 CreateMutextMutex
によって作成されたカーネルオブジェクトのラッパーです。カーネルオブジェクトハンドルを閉じるための.Netクラス呼び出しの実装を想定しています。Dispose
Mutex
CloseHandle
いずれの場合も、このようなハンドルは、プロセスが終了するとシステムによって自動的に閉じられます。