检测陈旧的互斥锁

sum*_*ame 1 delphi debugging multithreading delphi-2010

是否有任何技术或工具可用于在运行时检测此类死锁?

在工作线程(几个中的一个,通常是4-6)中描绘这个

try
   WaitForSingleObject(myMutex);
   DoSTuffThatMightCauseAnException;
except
   ReleaseMutex(myMutex);
end;
Run Code Online (Sandbox Code Playgroud)

或者更普遍的是有一种设计模式来避免这些错误吗?

经过长时间的黑客攻击,我在上面的代码中编写了上面的代码

Rem*_*eau 6

更好的编码风格是使用try/finally而不是try/except for mutex release(或任何其他类型的资源释放,就此而言),即:

try
  WaitForSingleObject(myMutex); 
  try 
    DoSTuffThatMightCauseAnException; 
  finally
    ReleaseMutex(myMutex); 
  end; 
except
  ...
end;
Run Code Online (Sandbox Code Playgroud)