次のコードを使用して、実行中の複数のプロセス間で共有リソースへの相互に排他的なアクセスを同期します。
ミューテックスは次のように作成されます。
Mutex mtx = new Mutex(false, "MyNamedMutexName");
次に、このメソッドを使用して、相互に排他的なセクションに入ります。
public bool enterMutuallyExclusiveSection()
{
//RETURN: 'true' if entered OK,
// can continue with mutually exclusive section
bool bRes;
try
{
bRes = mtx.WaitOne();
}
catch (AbandonedMutexException)
{
//Abandoned mutex, how to handle it?
//bRes = ?
}
catch
{
//Some other error
bRes = false;
}
return bRes;
}
そしてそれを残すためのこのコード:
public bool leaveMutuallyExclusiveSection()
{
//RETURN: = 'true' if no error
bool bRes = true;
try
{
mtx.ReleaseMutex();
}
catch
{
//Failed
bRes = false;
}
return bRes;
}
AbandonedMutexException
しかし、実行中のプロセスの1つがクラッシュした場合、またはタスクマネージャーから終了した場合、ミューテックスは例外を返す可能性があります。だから私の質問は、それから抜け出すための優雅な方法は何ですか?
これはうまくいくようです:
catch (AbandonedMutexException)
{
//Abandoned mutex
mtx.ReleaseMutex();
bRes = mtx.WaitOne();
}
しかし、その場合、相互に排他的なセクションに入ることができますか?
誰かが明確にすることができますか?