类成员是否没有缓存行问题?

时间:2014-10-23 13:00:52

标签: multithreading delphi delphi-6

TThread类中,有一个名为Terminated的类成员(属性)。
还有一个procedure Terminate;仅将Terminated设置为True
当我们从TThread继承时,在某些情况下我们会检查是否已终止。以下池/循环仅用于演示可能的情况:

  while not Terminated do
  begin
    Work;
  end;

终止的保证永远不会被处理器缓存?

2 个答案:

答案 0 :(得分:5)

Delphi编译器在优化方面并不咄咄逼人。它将类的成员视为全局。这意味着,基本上不是本地。编译器知道其他方可以看到变量。与简单的局部变量不同。

对于全局变量,编译器不会注册其对该变量的访问权限。因此,无论何时读取变量,都会从内存中读取值。同样在写入时,该值将写入内存。

剩下的就是内存缓存。存储器系统确保不同处理器高速缓存之间的一致性。

因此,TThread实施终止没有问题。

答案 1 :(得分:4)

Delphi 永远不会在寄存器中缓存属性值,如果这是你所指的那些。