有没有办法查询临界区有多少块?
Is there a way to query how many blocks a critical section has?
我有一个多线程 Delphi 应用程序,它使用 TCriticalSection。周期性地,线程数开始变得非常高。最终,大约 30 秒后,所有线程都会处理。我怀疑封装在我的关键部分中的代码有时可能需要比平时更长的时间来处理。因此将 "blocks" 放在所有其他线程上。
有没有办法查询 CritialSections 并找出它们当前阻塞了多少线程?
try
ReportCriticalSection.Acquire;
........
finally
ReportCriticalSection.Release;
end;
检查 TRtlCriticalSection.LockCount
字段。在TCriticalSection
中,RTL结构是一个受保护的字段。
Matt Pietrek 和 Russ Osterlund 几年前在 MSDN 杂志 上发表了一篇文章,其中描述了所有字段的含义。仅将它们用于调试,而不是业务逻辑。
Break Free of Code Deadlocks in Critical Sections Under Windows
我有一个多线程 Delphi 应用程序,它使用 TCriticalSection。周期性地,线程数开始变得非常高。最终,大约 30 秒后,所有线程都会处理。我怀疑封装在我的关键部分中的代码有时可能需要比平时更长的时间来处理。因此将 "blocks" 放在所有其他线程上。
有没有办法查询 CritialSections 并找出它们当前阻塞了多少线程?
try
ReportCriticalSection.Acquire;
........
finally
ReportCriticalSection.Release;
end;
检查 TRtlCriticalSection.LockCount
字段。在TCriticalSection
中,RTL结构是一个受保护的字段。
Matt Pietrek 和 Russ Osterlund 几年前在 MSDN 杂志 上发表了一篇文章,其中描述了所有字段的含义。仅将它们用于调试,而不是业务逻辑。
Break Free of Code Deadlocks in Critical Sections Under Windows