-1

MSDNの記事MutexClassは(コード例へのコメントで)次のように述べています。

Monitorとは異なり、MutexはWaitHandle.WaitAllおよびWaitAnyで使用でき、AppDomainの境界を越えて渡すことができます。

ミューテックスが管理されていないリソースを採用しているということですか?
では、なぜMutexの使用法に関するMSDNコード例ではDispose()を使用しないのでしょうか。

4

2 に答える 2

2

Mutex およびその他の多くの同期オブジェクトは、さまざまなカーネル オブジェクト ( http://msdn.microsoft.com/en-us/library/windows/desktop/ms724485(v=vs.85).aspx ) のラッパーであるため、はい、使用します内部の管理されていないリソース。

それらを使い終わったら呼び出す必要がありますが、プロセスが終了したとき、またはファイナライザーが起動したときに解放されるため(破棄していない場合)、例を簡単にするために、それらは適切に行われ.Disposeなかったと思います。Dispose

MSDN からの WaitHandles に関するメモ:

WaitHandle への最後の参照を解放する前に、必ず Dispose を呼び出してください。
そうしないと、使用しているリソースが使用できなくなります。
ガベージ コレクタが WaitHandle オブジェクトの Finalize メソッドを呼び出すまで解放されます。
于 2013-03-01T09:30:12.313 に答える
0

はい、実装Mutexするを継承するため、破棄する必要があります。WaitHandleIDisposable

内部的には、 CreateMutextMutexによって作成されたカーネルオブジェクトのラッパーです。カーネルオブジェクトハンドルを閉じるための.Netクラス呼び出しの実装を想定しています。DisposeMutexCloseHandle

いずれの場合も、このようなハンドルは、プロセスが終了するとシステムによって自動的に閉じられます。

于 2013-03-01T09:35:11.787 に答える