【发布时间】:2012-10-16 14:53:48
【问题描述】:
在 Delphi 中是否有类似 Java Memory Model 的东西?为了防止误解:我的意思不是“巨大/大/小”之类的东西,而是与其他线程更改的可见性有关的事情。
【问题讨论】:
-
@David Heffernan:如果事情这么简单,就不需要内存模型了。 amd64 架构不保证在没有特殊指令的情况下可以正常访问内存。在多核系统上,不能保证线程会永远看到运行在不同内核上的线程在内存中所做的任何更改,除非您正在使用
volatile或进行一些同步。这确实发生了,而且很常见。 -
x86 和 x64 有强内存模型:herbsutter.com/2012/08/02/… 至于
volatile,我很清楚,虽然根据你使用的编译器,它有很多不同的含义。但是既然你说的是Delphi,这里就没有意义了。我的理解是,对于 volatile 的一些适当定义,Delphi 使非局部变量 volatile! -
如果 Intel/AMD “弱化” x86/x64 指令集的现有内存模型,地球上的每个应用程序和操作系统都会崩溃。它们只能“削弱”现有代码和编译器不使用的新指令或新执行模式的内存语义。英特尔和 AMD 非常了解“选择加入”。
-
我不能评论当前的 Delphi 编译器的东西,但我可以非常坚持 Intel/AMD 硬件。 :>
-
@dthorpe 你能评论一下 D6 编译器吗?我知道当前的 32 位编译器在这个领域几乎没有区别。
标签: java delphi concurrency