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

EPr*_*und 2 delphi multithreading delphi-6

TThread类中有一个名为的类成员(属性)Terminated.
此外,还有一个procedure Terminate;它仅仅设置TerminatedTrue.
当我们继承时,TThread有一些情况我们检查终止.以下池/循环只是为了演示可能的情况:

  while not Terminated do
  begin
    Work;
  end;
Run Code Online (Sandbox Code Playgroud)

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

Dav*_*nan 5

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

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

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

因此,TThread终止的实现没有问题.