0

我有通过访问 QueryPerformanceCounter 记录例程执行时间的代码。大致:

var
    FStart, FStop : Int64 ;
...
QueryPerformanceCounter (FStart) ; 
... <code to be measured>
QueryPerformanceCounter (FStop) ; 

<calculate FStop - FStart, update minimum and maximum execution times, etc>

其中一些日志记录代码在线程内,但另一方面,有一个显示 UI 可以访问派生的结果。我认为 VCL 线程有可能访问日志代码也在访问的相同变量。VCL 只会读取数据(并且损坏的读取不会太严重),但日志记录代码会读取和写入数据,有时来自另一个线程。

我假设 QueryPerformanceCounter 本身是线程安全的。

代码运行愉快,没有任何问题的迹象,但我想知道是否需要将对 Int64 计数器的访问包装在关键部分中?

我还想知道关键部分访问的速度损失是多少?

4

1 回答 1

1

每当您在涉及读取和写入的情况下跨线程访问多字节非原子数据时,都需要对访问进行序列化。是否使用临界区、互斥体、信号量、SRW 锁等取决于您。

于 2011-12-09T04:58:58.757 回答