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