volatile相关内容

编译器在处理易失性内存位置时必须遵循哪些规则?

我知道当从多个线程或进程写入的内存位置读取时,volatile 关键字应该用于该位置,如下面的某些情况,但我想了解更多有关哪些限制的信息它真的对编译器有用吗?基本上编译器在处理这种情况时必须遵循什么规则,是否存在任何例外情况,尽管同时访问内存位置,但程序员可以忽略 volatile 关键字. volatile SomeType * ptr = someAddress;void someFunc( ..
发布时间:2022-01-17 08:16:28 C/C++开发

分析 volatile 上下文中 JIT 生成的 x86 输出

我写这篇文章是为了深入理解Java中的volatile 公共类 Main {私人int x;私人易失性int g;公共无效actor1(){x = 1;g = 1;}公共无效actor2(){put_on_screen_without_sync(g);put_on_screen_without_sync(x);}} 现在,我正在分析 JIT 为上述代码生成的内容.根据我们在上一篇文章中的讨论, ..
发布时间:2022-01-16 12:06:16 Java开发

在哪里使用易失性?

我读到了 volatile 关键字,但我不知道应该在什么情况下使用它. 当内存(变量)被更新而进程没有意识到这一点时? 驱动程序在什么情况下应该使用 volatile 变量? 解决方案 在我的世界中,最常见的情况是当您编写使用内存映射 I/O 的微控制器时.寄存器中的值可能会因外部数字输入而改变,但如果您不将变量声明为 volatile,编译器可能会完全优化代码,您会想知道为什 ..

何时将 volatile 与共享 CUDA 内存一起使用

在什么情况下应该将volatile关键字与CUDA内核的共享内存一起使用?我知道 volatile 告诉编译器永远不要缓存任何值,但我的问题是关于共享数组的行为: __shared__ 浮动产品[THREADS_PER_ACTION];//一些计算产品[threadIdx.x] = localSum;//等待每个人完成计算__syncthreads();//然后是(基本的,丑陋的)减少:if ( ..
发布时间:2022-01-10 15:30:26 其他开发

静态全局变量和静态 volatile 变量有什么区别?

我在文件范围内使用了一个静态全局变量和一个静态 volatile 变量, 两者都由 ISR 和主循环更新,主循环检查变量的值. 这里在优化过程中,全局变量和 volatile 变量都没有被优化.因此,不是使用 volatile 变量,而是使用全局变量来解决问题. 那么使用全局变量而不是 volatile 好吗? 使用静态 volatile 的任何具体原因? 任何示例程序都是可观的. 提 ..
发布时间:2022-01-05 20:24:53 其他开发

我什么时候会在 C++ 中使用 const volatile、register volatile、static volatile?

我想知道 volatile 关键字与 register、const 和 static 的不同用法关键词.我不确定有什么影响,所以我认为: register volatile int T=10; 建议编译器将 T 存储在寄存器中,并且可以从外部(操作系统、硬件、另一个线程)修改 T 的值 const volatile int T=10; 程序本身不能修改T,但可以在代码之外的某处修改T. ..
发布时间:2022-01-05 20:23:34 C/C++开发

如何在删除密钥时安全地迭代 lua 表

在我的主协程中,我根据用户操作从表中删除或添加条目.在后台,我想遍历表中的条目.如果我在一次迭代中错过了插入,我并不介意,前提是我可以在下一次之前抓住它. 使用 pairs 迭代它是否安全?还是我应该使用 next 代替? 解决方案 您可以在遍历表时安全地删除条目,但不能创建新条目,即新键.不过,您可以修改现有条目的值.(删除条目是该规则的一个特例.) ..
发布时间:2021-12-30 20:27:58 其他开发

Java:VolatileImage 比 BufferedImage 慢

我正在用 Java 制作游戏,并使用 BufferedImages 将内容呈现到屏幕上.我在应该运行游戏的低端机器上遇到了性能问题,所以我切换到通常速度更快的 VolatileImage.除非他们实际上减慢了整个过程. 图像是用 GraphicsConfiguration.createCompatibleVolatileImage(...) 创建的,并用 Graphics.drawImage ..
发布时间:2021-12-30 18:50:07 Java开发

可以证明“易失性"的代码示例如下:应该使用声明

目前我不明白什么时候应该使用 volatile 来声明变量. 我已经做了一些研究并搜索了很长时间的一些资料,知道当一个字段被声明为 volatile 时,编译器和运行时会注意到这个变量是共享的,并且对它的操作不应该重新排序与其他内存操作. 但是,我仍然无法理解我们应该在什么场景下使用它.我的意思是有人可以提供任何示例代码来证明使用“volatile"与不使用它相比可以带来好处或解决问题 ..
发布时间:2021-12-28 23:08:23 Java开发

没有 volatile 的双重检查锁定(但带有 VarHandle 释放/获取)

这个问题在某种程度上很简单.假设我有这个类: 静态类单例{} 我想为它提供一个单例工厂.我可以做(可能)显而易见的事情.我不打算提及枚举的可能性或任何其他可能性,因为我对它们不感兴趣. static final class SingletonFactory {私有静态 volatile 单例单例;公共静态单例 getSingleton() {if (singleton == null) {/ ..
发布时间:2021-12-28 22:59:54 Java开发

字段读取同步和 volatile 的区别

在一篇不错的文章中并发提示,一个例子被优化为以下几行: double getBalance() {帐户acct =验证(名称,密码);同步(acct){返回acct.balance;}} 如果我理解正确的话,同步的重点是确保这个线程读取的 acct.balance 的值是当前的,并且任何对 acct.balance 中对象字段的未决写入也被写入到主内存. 这个例子让我想到了一点:将acc ..
发布时间:2021-12-28 22:59:48 Java开发

对可变对象使用 volatile 关键字

在 Java 中,我知道 volatile 关键字提供了对变量的可见性.问题是,如果变量是对可变对象的引用,volatile 是否也提供对该对象内部成员的可见性? 在下面的示例中,如果多个线程正在访问 volatile Mutable m 并更改 value,它是否正常工作? 示例 类可变{私有整数值;公共 int get(){返回一个;}公共整数集(整数值){this.value ..
发布时间:2021-12-28 22:55:39 Java开发

可变变量和其他变量

以下来自经典的Concurency in Practice: 当线程 A 写入 volatile 变量并随后写入线程 B 时读取相同的变量,所有 变量的值在写入 volatile 变量之前对 A 可见,变为可见读取 volatile 变量后到 B. 我不确定我是否真的能理解这句话.例如,在这种情况下所有变量是什么意思?这是否意味着使用 volatile 也会对非 volatile 变量 ..

使用 volatile long 有什么意义吗?

我偶尔会使用 volatile 实例变量,以防我有两个线程读取/写入它,并且不想要取出锁的开销(或潜在的死锁风险);例如,一个计时器线程会定期更新一个 int ID,该 ID 作为某个类的 getter 公开: public class MyClass {私有易失性 int id;公共 MyClass() {ScheduledExecutorService execService = Execu ..
发布时间:2021-12-28 22:53:15 Java开发

单例双重检查并发问题

休耕条款取自 jetbrains.net在阅读了这篇文章和网络上的其他一些文章后,我仍然不明白在第一个线程进入锁之后如何返回 null.哪位懂的可以帮我解释一下更人性化一点? "考虑以下代码: 公共类Foo{私有静态 Foo 实例;私有静态只读对象挂锁=新对象();公共静态 Foo Get(){如果(实例 == 空){锁(挂锁){如果(实例 == 空){实例 = 新 Foo();}}}返回 ..
发布时间:2021-12-28 22:51:58 C#/.NET

写入 volatile 是 Java 中的内存屏障吗

我最近在一次演讲中听到,对 volatile 的写入会为线程已写入的每个变量触发内存屏障.那真的正确吗?从 JLS 来看,似乎只有相关的变量被刷新,而不是其他变量.有谁知道什么是真正正确的?可以告诉我 JLS 中的具体位置吗? 解决方案 Volatile 变量的引用和其他变量是正确的.我没有意识到happens-before 的传递性是必须由VM 实现的,而不是遵循定义的.我仍然感到困惑, ..
发布时间:2021-12-28 22:50:07 Java开发

为什么 java 5+ 中的 volatile 不能确保来自另一个线程的可见性?

根据: http://www.ibm.com/developerworks/library/j-jtp03304/ 在新的内存模型下,当线程 A 写入易失性变量 V,而线程 B 从 V 读取时,在写入 V 时 A 可见的任何变量值现在保证对 B 可见 互联网上的许多地方都声明以下代码不应打印“错误": 公共类测试{volatile 静态私有 int a;静态私有 int b;p ..
发布时间:2021-12-28 22:46:37 Java开发

Java 中 volatile 关键字的最简单易懂的例子

我正在阅读 Java 中的 volatile 关键字并完全理解其中的理论部分. 但是,我正在寻找的是一个很好的例子,它显示了如果变量不是 volatile 会发生什么,如果它是. 以下代码片段无法按预期工作(取自此处): class 测试扩展线程 {boolean keepRunning = true;公共无效运行(){而(保持运行){}System.out.println("线程终 ..
发布时间:2021-12-28 22:38:22 Java开发