Обнаружение несвежего Mutex - PullRequest
1 голос
/ 15 июня 2010

Есть ли какой-либо метод или инструмент, доступный для обнаружения этого типа тупика во время выполнения?

изобразите это в рабочем потоке (один из нескольких, обычно 4-6)

try
   WaitForSingleObject(myMutex);
   DoSTuffThatMightCauseAnException;
except
   ReleaseMutex(myMutex);
end;

или, в более общем смысле, существует ли шаблон проектирования, позволяющий избежать подобных ошибок?

Я кодировал приведенный выше код в небольшом корпусе после длительного взлома

1 Ответ

6 голосов
/ 15 июня 2010

Лучшим стилем кодирования является использование try / finally вместо try / кроме выпуска мьютекса (или любого другого вида освобождения ресурса, в этом отношении), то есть:

try
  WaitForSingleObject(myMutex); 
  try 
    DoSTuffThatMightCauseAnException; 
  finally
    ReleaseMutex(myMutex); 
  end; 
except
  ...
end;
...