在TThread
类中,有一个名为Terminated
的类成员(属性)。
还有一个procedure Terminate;
仅将Terminated
设置为True
。
当我们从TThread
继承时,在某些情况下我们会检查是否已终止。以下池/循环仅用于演示可能的情况:
while not Terminated do
begin
Work;
end;
终止的保证永远不会被处理器缓存?
答案 0 :(得分:5)
Delphi编译器在优化方面并不咄咄逼人。它将类的成员视为全局。这意味着,基本上不是本地。编译器知道其他方可以看到变量。与简单的局部变量不同。
对于全局变量,编译器不会注册其对该变量的访问权限。因此,无论何时读取变量,都会从内存中读取值。同样在写入时,该值将写入内存。
剩下的就是内存缓存。存储器系统确保不同处理器高速缓存之间的一致性。
因此,TThread
实施终止没有问题。
答案 1 :(得分:4)
Delphi 永远不会在寄存器中缓存属性值,如果这是你所指的那些。