Como sair da AbandonedMutexException?
Eu uso o seguinte código para sincronizar o acesso mutuamente exclusivo a um recurso compartilhado entre vários processos em execução.
O mutex é criado como tal:
Mutex mtx = new Mutex(false, "MyNamedMutexName");
Então eu uso este método para entrar na seção mutuamente exclusiva:
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;
}
e esse código para deixar:
public bool leaveMutuallyExclusiveSection()
{
//RETURN: = 'true' if no error
bool bRes = true;
try
{
mtx.ReleaseMutex();
}
catch
{
//Failed
bRes = false;
}
return bRes;
}
Mas o que acontece é que, se um dos processos em execução falhar, ou se for finalizado a partir de um Gerenciador de Tarefas, o mutex poderá retornarAbandonedMutexException
exceção. Então, minha pergunta é: qual é a maneira elegante de sair disso?
Isso parece funcionar bem:
catch (AbandonedMutexException)
{
//Abandoned mutex
mtx.ReleaseMutex();
bRes = mtx.WaitOne();
}
Mas posso entrar na seção mutuamente exclusiva nesse caso?
Alguém pode esclarecer?