我有代码通过访问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计数器中?
我也想知道关键部分访问的速度惩罚是什么?
答案 0 :(得分:1)
任何时候在涉及读写操作时跨线程访问多字节非原子数据时,都需要序列化访问。您是否使用临界区,互斥锁,信号量,SRW锁等等。