5

アプリケーションに名前付きミューテックスがあります。

 private Mutex TaskExitStatus = new Mutex(false, "TaskExit")

TaskExitStatus.WaitOne() を使用してメソッドでミューテックスを取得します

アプリケーションを終了するときにミューテックスを解放しないとどうなりますか? ミューテックスは安全に破棄されますか?

更新 1: アプリケーションの終了時に解放されていない場合、名前付きミューテックスと無名ミューテックスの両方が同じように動作しますか?

Update 2これはMSDNリンク から読んだものです

ハンドルを閉じるには、CloseHandle 関数を使用します。プロセスが終了すると、システムはハンドルを自動的に閉じます。ミューテックス オブジェクトは、最後のハンドルが閉じられると破棄されます。

4

2 に答える 2

6

ドキュメントによると、それは放棄されています(必ずしも処分されているわけではありません)

ミューテックスを所有しているときにスレッドが終了した場合、ミューテックスは放棄されたと言われます

また、放棄されたミューテックスに関する警告にも注意してください。

放棄されたミューテックスは、多くの場合、コードに重大なエラーがあることを示しています。スレッドがミューテックスを解放せずに終了すると、ミューテックスによって保護されているデータ構造が一貫した状態にない可能性があります。ミューテックスの所有権を要求する次のスレッドは、データ構造の整合性を検証できる場合、この例外を処理して続行できます。

于 2012-10-23T10:14:56.150 に答える
2

Mutex の目的は、ロックが解除されるまで (アプリケーション全体の名前付き Mutex の) ロックを維持することです。Mutex を解放しない場合は、コンピューターが再起動されるまでリソースのロックを維持する必要があります。

于 2012-10-23T10:16:38.307 に答える