Я постоянно читаю из файла, отображаемого в память, который записывает другой процесс, и использую мьютекс для синхронизации этой операции. В моих немногих тестах это работает отлично, но ... что, если мое приложение выйдет из строя сразу после получения мьютекса и перед его выпуском? Есть ли способ гарантировать освобождение мьютекса даже в случае такого сбоя?
Также как я могу справиться с отказом другого процесса, который, возможно, еще не освободил мьютекс? Нужно ли мне обрабатывать 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: Кроме того, есть ли какие-либо другие очевидные проблемы, почему это может не получиться, о чем я еще не упоминал?