オブジェクトの作成中にミューテックスを使用して一部のコードを同期するC#アプリケーションコードがあります。オブジェクトコンストラクターはミューテックスを取得し、オブジェクトが不要になったとき(アプリのシャットダウン中)にのみミューテックスを解放します。したがって、ミューテックスを解放する1つの場所は、オブジェクトデストラクタになります。発生した問題は、オブジェクトデストラクタでのReleaseMutex()の呼び出し中に例外が発生することがあることです。例外は、「オブジェクト同期メソッドが同期されていないコードブロックから呼び出された」です。オブジェクトデストラクタを呼び出すガベージコレクションを実行するスレッドは、そもそもミューテックス(Mutex.WaitOne(false、namedMutex))を待機するスレッドとは異なる場合があるようです。この例外を回避するために、同じスレッドでミューテックスの取得と解放を同期するにはどうすればよいですか?ご協力いただきありがとうございます!
public class MyObject
{
static ExtDeviceDriver devDrv;
private Mutex mut = new Mutex(false,myMutex);
public MyObject()
{
mut.WaitOne();
//Thread safe code here.
devDrv = new ExtDeviceDriver();
}
~MyObject()
{
mut.ReleaseMutex();
}
}