«Безопасная» обработка мьютекса?

Я постоянно читаю из файла, отображаемого в память, который записывает другой процесс, и использую мьютекс для синхронизации этой операции. В моих немногих тестах это работает отлично, но ... что, если мое приложение выйдет из строя сразу после получения мьютекса и перед его выпуском? Есть ли способ гарантировать освобождение мьютекса даже в случае такого сбоя?

Также как я могу справиться с отказом другого процесса, который, возможно, еще не освободил мьютекс? Нужно ли мне обрабатывать AbandonedMutexException каждый раз, когда я вызываю mutex.WaitOne ()?

Сейчас я делаю это примерно так:

public MyState GetState()
{
    MyState state = new State();
    this._mutex.WaitOne();
    try
    {
        state.X = this._mmView.ReadSingle(0);
        state.Y = this._mmView.ReadSingle(4);
        [..]
    }
    finally
    {
        this._mutex.ReleaseMutex();
    }
    return state;
}

_mmView - экземпляр MemoryMappedViewAccessor, который я создавал ранее. Весь этот метод GetState () вызывается каждый кадр как часть игрового цикла, то есть примерно каждые несколько миллисекунд.

PS: Кроме того, есть ли какие-либо другие очевидные проблемы, почему это может не получиться, о чем я еще не упоминал?

8
задан Mario 6 February 2012 в 23:32
поделиться