c - Delphi 是否有任何等效于 C 的 volatile 变量?

标签 c multithreading delphi volatile memory-model

在 C 和 C++ 中,变量可以标记为 volatile ,这意味着编译器不会优化它,因为它可能在声明对象的外部被修改。 Delphi 编程中是否有等效项?如果不是关键字,也许可以变通?

我的想法是使用 Absolute,但我不确定,这可能会带来其他副作用。

最佳答案

简短的回答:没有。

但是,如果您采用这种方法,我不知道在任何情况下编译器的保守方法会改变读取或写入的次数:

读取跨线程可见位置时,在进行任何进一步操作之前将其值保存到本地;同样,将写入限制为单个分配。

当在表达式之间调用非内联方法时,Delphi 编译器不会对非局部位置表达式执行公共(public)子表达式消除 (CSE),因为编译器不会进行过程间优化,因此它是不正确的即使是单线程代码。

因此,您可能希望使用 InterlockedExchange() 进行读写以强制执行此操作;此外,这将导致完全内存屏障,因此处理器也不会重新排序读取和写入。

关于c - Delphi 是否有任何等效于 C 的 volatile 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/232075/

相关文章:

java - 使用带有线程参数的 Gregory-Leibniz 时出现 pi 值错误

德尔福: Connect to yahoo web messenger with idhttp

c - 将 C 指针代码示例转换为 Delphi 指针语法

c - 在将宏作为参数传递给另一个宏之前,按值转换宏

java - 使用 springframework 的不良 JUnit 测试具有脆弱的 Thread.sleep() 调用。怎么修?

delphi - 在单元破坏调试信息中通用定义

arrays - 在 Delphi 中,我应该释放 "array of array of"变量吗?

c - 静态变量

c - 按 C 中元素出现频率的降序对数组进行排序

multithreading - 进程与线程的例子