volatile相关内容

如何复制/设置易失性 std::string?

如何复制volatile std::string?没有用于 volatile 的复制构造函数,也不允许像 c_str 这样的东西允许 volatile 访问.operator= 似乎也不允许设置 volatile.看起来 std::string 根本无法用作易失性对象.这是有意为之,还是我缺少某种使用方法? 注意:我有简单的解决方法,我只是在尝试在一些低级代码中使用字符串时遇到了这个问题. ..
发布时间:2021-08-30 19:10:57 C/C++开发

当在 2.9.0-1 但不是 2.8.1 中的具体类中混合时,trait 中的方法变成了 volatile 方法

我注意到 2.9.0-1 中的这一重大变化(对我来说与 OGNL 一起使用): 我发现,在 2.9 中,在 trait 中声明的方法在混入类中时会变得不稳定: 2.9.0-1 中的例子 import java.lang.reflect.Modifier特质 SuperTrait {def getKnoll = "Kanutten"}类 KlassWithKnoll 扩展了 Super ..
发布时间:2021-07-15 20:50:48 其他开发

有没有办法验证 Windows 注册表项是否易失 (REG_OPTION_VOLATILE)?

在 Windows 注册表中,密钥可以创建为易失性 - 这意味着易失性密钥不会在 PC 重启后继续存在.重新启动后,注册表中将找不到此类密钥的踪迹.这由 API RegCreateKeyEx 的选项 REG_OPTION_VOLATILE 指定. 我需要验证某个 Windows 注册表项是否易失(使用 REG_OPTION_VOLATILE 创建). 例如,密钥可能位于 (HKLM\S ..
发布时间:2021-07-07 18:36:57 其他开发

我是否需要使用 volatile 关键字来访问临界区的内存?

我正在使用 gcc 为单处理器 32 位微控制器编写代码. 我需要使用链表中带时间戳的对象.代码的另一部分可能是异步的(可能在 ISR 中)将它们添加到列表中. 临界区是通过关闭中断并使用barrier()函数来实现的. 我很困惑 gcc 优化可以通过缓存指向列表项(下一个要删除的最近项、列表头或空闲列表)的指针来破坏我的代码.我不希望 while 循环中的任何内容从循环中的前一 ..

在不同的对象可见性上同步

以下代码显示了与此不同对象的同步: 公共类 A {输入 a,b,c,d;公共无效方法1(对象x){同步(x){//a ,b ,c ,d 是否保证可见性?}}公共同步无效方法2(){一个++;}} 我知道编辑 a、b、c、d 会出现问题,因为在 method1 和 method2 中有不同的锁定,但问题是 method2 刷新的更改对 method1 是否可见?因为他们不使用相同的锁. 解 ..
发布时间:2021-06-04 20:31:49 Java开发

为什么即使使用 Monitor,也不是所有成员变量都需要 volatile 来保证线程安全?(为什么模型真的有效?)

(我知道他们没有,但我正在寻找这实际上在不使用 volatile 的情况下工作的根本原因,因为应该没有什么阻止编译器在没有 volatile 的情况下将变量存储在寄存器中......或者在那里.......) 这个问题源于一种不和谐的想法,即没有 volatile 编译器(理论上可以以各种方式优化任何变量,包括将其存储在 CPU 寄存器中.)虽然文档说在使用同步时不需要像锁定变量一样.但是在 ..
发布时间:2021-06-04 20:30:00 C#/.NET

以下 java 代码线程安全没有 volatile 吗?

public static Singleton singleton;公共静态单例 get(){同步(Singleton.class){如果(单例==空){单例 = 新单例();}}返回单身人士;} 有人说 singleton 变量没有 volatile 是错误的.但我认为这是创建单例对象的正确代码.我想知道这段代码有没有线程安全? 解决方案 正如 anatolyg 指出的那样,您应该使字 ..

x86 架构上的 Java、易失性和内存障碍

这更像是一个理论问题.我不确定所有概念、编译器行为等是否都是最新的并且仍在使用中,但我想确认一下我是否正确理解了我正在尝试学习的一些概念. 语言是 Java. 据我目前所了解,在 X86 架构上,StoreLoad 屏障(尽管用于实现它们的确切 CPU 指令)放置在 Volatile 写入之后,以使它们对其他线程中的后续 Volatile Reads 可见(因为 x86不保证较新的读取 ..
发布时间:2021-06-04 20:23:41 Java开发

`volatile` 在线程之间同步变量

我有一个从两个线程访问的变量 int foo.假设我没有竞争条件问题(访问受互斥锁保护,所有操作都是原子的,或者任何其他保护竞争条件的方法),仍然存在“寄存器缓存"问题(因为没有更好的名称),其中编译器可能会假设如果变量被读取两次而没有被写入,它是相同的值,因此可能会“优化"以下内容: while(foo) {// ..
发布时间:2021-06-04 20:11:01 C/C++开发

volatile 变量有用吗?如果是,那么什么时候?

回答这个问题让我想想还有什么对我来说还不清楚.首先假设我们阅读了这篇文章和这篇文章. [开始编辑]也许不是那么明显(意大利幽默?!)但标题很挑衅:当然应该有一个理由,如果volatile 已包含在 C# 中,我只是无法理解确切的.[end edit] 简而言之,我们知道我们有三个工具可以在线程之间共享变量: lock 因为这将防止指令重新排序. volatile 因为会强制 C ..
发布时间:2021-06-04 20:10:17 C#/.NET

如何使 volatile count++ 操作成为线程安全的

我一直在通过 JCIP,作者说.. 线程限制的一种特殊情况适用于 volatile 变量.只要确保 volatile 变量仅从单个线程写入,就可以安全地对共享的 volatile 变量执行读-修改-写操作 例如 count++ 被认为是一个复合操作(读取值,加一,更新值)并且将 count 声明为 volatile 不会使这个操作原子化,所以这里不保证线程安全!我对吗 ??但是这里作者 ..
发布时间:2021-06-04 20:09:37 Java开发

'volatile' 关键字在 C# 中仍然无效吗?

Joe Albahari 有一个关于多线程的很棒的系列,这是必读的,并且应该牢记在心任何使用 C# 多线程的人. 然而,在第 4 部分中,他提到了 volatile 的问题: 请注意,应用 volatile 不会阻止写入后跟从被交换中读取,这会造成脑筋急转弯.乔·达菲下面的例子很好地说明了这个问题:如果 Test1 和Test2 同时运行在不同的线程上,a 和b 最终都为 0(尽管使用 ..
发布时间:2021-06-04 20:07:08 C#/.NET

宽松的排序和线程间可见性

我从 将放宽排序作为信号 中了解到,存储在原子变量上应该在“合理的时间内"对其他线程可见. 也就是说,我很确定它应该在很短的时间内发生(几纳秒?).但是,我不想依赖“在合理的时间内". 所以,这里有一些代码: std::atomic_bool canBegin{false};void functionThatWillBeLaunchedInThreadA() {if(canBegin ..
发布时间:2021-06-04 20:03:19 C/C++开发

在 Java 中模拟 Field-visibility 问题

我正在阅读有关 Java 内存模型的教程之一,并遇到了在多线程编程中发生的字段可见性 的概念.我尝试使用以下代码模拟相同的内容,但是,我在每个线程中看到,最新值正在反映(在 ReaderThread 中). 以下是完整的程序. 编辑 在使用 while(somevariable) 的一些建议之后,我合并了,但仍然得到相同的行为.我在阅读 x 时删除了 sysout Field ..
发布时间:2021-06-04 20:03:08 Java开发

在锁语句内部是否仍需要volatile?

我在不同的地方读过,人们说人们应该始终使用 lock 而不是 volatile .我发现那里有很多关于多线程的令人困惑的陈述,甚至专家在这里对某些事情也有不同的看法. 经过大量研究,我发现lock语句还将至少插入 MemoryBarriers . 例如: public bool stopFlag;无效Foo(){锁(myLock){而(!stopFlag){//做一点事}}} ..
发布时间:2021-05-30 20:08:07 C#/.NET

将易失性分配给非易失性语义和C标准

volatile int vfoo = 0;无效func(){诠释吧;做{bar = vfoo;//L.7} while(bar!= 1);返回;} 此代码忙于等待变量变为 1 .如果第一次将 vfoo 设置为 1 ,我会卡在里面吗. 此代码编译时没有警告.标准对此有何说法? vfoo 被声明为 volatile .因此,应不优化对该变量的读取. 但是,酒吧不合格 易失性.是否 ..
发布时间:2021-05-28 20:16:15 其他开发

"volatile"是否保证任何线程都读取最近写入的值?

摘自有效Java一书: 虽然volatile修饰符不执行互斥,但它保证读取该字段的任何线程都将看到最新写入的值 SO 和许多其他来源都声称类似. 这是真的吗? 我的意思是真实的,不是一个足够接近的模型,或者仅在x86上,或者仅在Oracle JVM中,或者“最近编写的"一些定义.那不是标准的英语解释... 其他消息来源( SO示例)说Java中的volatile就像C ..
发布时间:2021-05-18 20:29:21 Java开发