我有一个多线程Delphi应用程序,它使用 TCriticalSection 。线程计数会定期开始变得非常高。最终,大约30秒后,所有线程都会进行处理。我怀疑在我的关键部分中封装的代码有时需要比平时更长的时间来处理。因此在所有其他线程上放置“块”。
有没有办法查询CritialSections并找出他们当前阻塞的线程数?
try
ReportCriticalSection.Acquire;
........
finally
ReportCriticalSection.Release;
end;
答案 0 :(得分:4)
检查TRtlCriticalSection.LockCount
字段。在TCriticalSection
中,RTL结构是受保护的字段。
几年前,Matt Pietrek和Russ Osterlund在 MSDN杂志上发表了一篇文章,其中包括所有领域的含义。仅将它们用于调试,而不是业务逻辑。
Break Free of Code Deadlocks in Critical Sections Under Windows