Comment gracieusement sortir de AbandonedMutexException?

J'utilise le code suivant pour synchroniser mutuellement un accès exclusif à une ressource partagée entre plusieurs processus en cours d'exécution.

Le mutex est créé en tant que tel:

Mutex mtx = new Mutex(false, "MyNamedMutexName");

Puis-je utiliser cette méthode pour entrer mutuellement exclusifs l'article:

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;
}

et ce code à la quitter:

public bool leaveMutuallyExclusiveSection()
{
    //RETURN: = 'true' if no error
    bool bRes = true;

    try
    {
        mtx.ReleaseMutex();
    }
    catch
    {
        //Failed
        bRes = false;
    }

    return bRes;
}

Mais ce qui arrive est que si l'un des processus en cours d'exécution se bloque, ou si elle est annulée à partir d'un Gestionnaire de Tâches, le mutex peut retourner AbandonedMutexException exception. Donc ma question est, quelle est la manière élégante de s'en sortir?

Cela semble bien fonctionner:

    catch (AbandonedMutexException)
    {
        //Abandoned mutex
        mtx.ReleaseMutex();
        bRes = mtx.WaitOne();    
    }

Mais puis-je entrer dans l'mutuellement exclusifs l'article dans ce cas?

Quelqu'un peut-il préciser?

InformationsquelleAutor c00000fd | 2013-03-17