次のコードを使用して、実行中の複数のプロセス間で共有リソースへの排他的アクセスを同期させます。AbandonedMutexExceptionから正常に抜け出すには?
ミューテックスのような作成された:それを残すために
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;
}
このコード:
Mutex mtx = new Mutex(false, "MyNamedMutexName");
は、その後、私は相互に排他的なセクションを入力するために、このメソッドを使用
public bool leaveMutuallyExclusiveSection()
{
//RETURN: = 'true' if no error
bool bRes = true;
try
{
mtx.ReleaseMutex();
}
catch
{
//Failed
bRes = false;
}
return bRes;
}
しかし、実行中のプロセスの1つがクラッシュした場合、またはタスクマネージャから終了した場合、ミュートxはAbandonedMutexException
例外を返します。だから私の質問は、それから抜け出すための優雅な方法は何ですか?
これは正常に動作するようです:
catch (AbandonedMutexException)
{
//Abandoned mutex
mtx.ReleaseMutex();
bRes = mtx.WaitOne();
}
しかし、私はその場合には、相互に排他的なセクションを入力することができますか?
誰かが明確にできるか?
ご存じのように、私は試してみましたが、例外はありません。それでも、mtx.WaitOne()をもう一度呼びますか? – c00000fd
いいえ、** WaitOne **を呼び出す必要はありません。** Mutex **は** AbandonedMutexException **を捕捉したスレッドによって既に獲得されているからです。 –
よろしくお願いいたします。 – c00000fd