【问题标题】:Detecting a stale Mutex检测陈旧的互斥体
【发布时间】:2010-06-15 06:10:58
【问题描述】:

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

在工作线程中想象一下(几个之一,通常是 4-6 个)

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

或者更一般地说,是否存在避免此类错误的设计模式?

经过较长时间的黑客攻击后,我在小屋中编写了上述代码

【问题讨论】:

  • @allenporter:互斥体只有在异常发生时才会释放,所以正常执行会导致互斥体没有被释放

标签: delphi multithreading debugging delphi-2010


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-02-11
    • 1970-01-01
    • 2013-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多