gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:10:03 24 4
gpt4 key购买 nike

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

  while not Terminated do
begin
Work;
end;

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

最佳答案

Delphi 编译器在优化方面一点也不激进。它将类成员视为全局。这意味着,本质上,不是本地。编译器知道其他方可以看到该变量。不同于简单的局部变量。

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

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

所以,终止的TThread实现没有问题。

关于multithreading - 类成员是否没有缓存行问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26528712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com