0
我有通过访问QueryPerformanceCounter记录例程的执行时间的代码。大致为:我是否需要用关键节来包装对Int64的访问?
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计数器?
我也想知道临界区访问的速度惩罚是什么?
OK。我不能利用只有一个线程正在写入数据的事实吗?当然,读取数据的另一个线程可能会读取一个部分更新的值,但这在本应用程序中并不是太重要(读取线程始终是读取数据以供显示并每秒刷新一次的VCL线程)。我更担心的是造成锁定的冲突。如果我需要序列化访问时间非常重要,因为花在管理访问上的任何时间都是计时开销。哪些选项具有最低的(时间)开销? – rossmcm
如果您所做的只是显示“Int64”的值,并且没有做任何其他操作,那么您就不需要序列化数据。如果您实际上是在根据价值行事,那么您将不得不序列化访问以确保其完整性。 –