我有一个利用TCriticalSection的多线程Delphi应用程序。线程数定期开始变得非常高。最终,大约 30 秒后,所有线程都开始处理。我怀疑封装在关键部分中的代码有时需要比平时更长的时间来处理。因此将“ block ”放在所有其他线程上。
有没有办法查询 CritialSections 并找出它们当前阻塞了多少线程?
try
ReportCriticalSection.Acquire;
........
finally
ReportCriticalSection.Release;
end;
最佳答案
检查 TRtlCriticalSection.LockCount
字段。在TCriticalSection
中,RTL结构是一个 protected 字段。
Matt Pietrek 和 Russ Osterlund 几年前在 MSDN 杂志 上发表了一篇文章,其中包含对所有字段含义的描述。仅将它们用于调试,而不用于业务逻辑。
Break Free of Code Deadlocks in Critical Sections Under Windows
关于delphi - 有没有办法查询关键部分有多少 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119596/