我是否需要使用临界区包装对Int64的访问?

时间:2011-12-09 02:26:52

标签: delphi thread-safety delphi-2006 critical-section int64

我有代码通过访问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计数器中?

我也想知道关键部分访问的速度惩罚是什么?

1 个答案:

答案 0 :(得分:1)

任何时候在涉及读写操作时跨线程访问多字节非原子数据时,都需要序列化访问。您是否使用临界区,互斥锁,信号量,SRW锁等等。