问题标签 [volatile]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
13102 浏览

c++ - 定义 volatile 类对象

volatile 可以用于类对象吗?像:

问题是它无法编译,当调用某个方法时,到处都是错误消息:error C2662: 'function' : cannot convert 'this' pointer from 'volatile MyClass' to 'MyCLass &'

这里有什么问题以及如何解决?

编辑:

0 投票
3 回答
1959 浏览

java - 字段读取同步和易失性之间的区别

在一篇包含一些并发技巧的好文章中,一个示例被优化为以下几行:

如果我理解正确,同步的重点是确保该线程读取的 acct.balance 的值是最新的,并且任何挂起的对 acct.balance 中对象字段的写入也被写入主内存.

这个例子让我想到了一点:将acct.balance(即类Account的字段余额)声明为不是更有效volatile吗?它应该更有效,节省您synchronize对 acct.balance 的所有访问权限,并且不会锁定整个acct对象。我错过了什么吗?

0 投票
5 回答
5901 浏览

c++ - 通过访问功能访问共享内存是否需要`volatile`?

[编辑]对于背景阅读,并且要清楚,这就是我所说的:volatile关键字简介

在查看嵌入式系统代码时,我看到的最常见错误之一是线程/中断共享数据的 volatile 遗漏。volatile但是我的问题是,当通过访问函数或成员函数访问变量时不使用它是否“安全” ?

一个简单的例子;在下面的代码中......

...变量flag必须是 volatile 以确保 ThreadA 中的读取不会被优化,但是如果标志是通过函数读取的...

......flag仍然需要不稳定吗?我意识到它是 volatile 并没有什么坏处,但我关心的是何时省略它并且没有发现遗漏;这会安全吗?

上面的例子很简单;在实际情况中(以及我询问的原因),我有一个包装 RTOS 的类库,因此有一个抽象类 cTask 派生任务对象。这种“活动”对象通常具有访问数据的成员函数,这些函数可以在对象的任务上下文中修改但从其他上下文访问;那么,这些数据被宣布为易失性至关重要吗?

我真的对这些数据的保证内容感兴趣,而不是实际的编译器可能会做什么。我可能测试了许多编译器,发现它们永远不会优化通过访问器的读取,但有一天会发现一个编译器或编译器设置使这个假设不成立。例如,我可以想象,如果函数是内联的,那么这种优化对于编译器来说将是微不足道的,因为它与直接读取没有什么不同。

0 投票
6 回答
3339 浏览

c - 为什么 POSIX mmap 不返回 volatile void*?

Mmap 返回 void*,但不返回volatile void*. 如果我使用 mmap 来映射共享内存,那么另一个进程可能正在写入该内存,这意味着从同一内存位置进行的两次后续读取可能会产生不同的值—— volatile 的确切情况。那么为什么它不返回一个 volatile void* 呢?

我最好的猜测是,如果您有一个专门写入共享内存段的进程,它不需要通过易失性指针查看共享内存,因为它总是对当前存在的内容有正确的理解;编译器为防止冗余读取所做的任何优化都无关紧要,因为没有其他东西可以写入和更改其脚下的值。还是有其他历史原因?我倾向于说返回volatile void*将是一个更安全的默认值,那些想要这种优化的人可以手动转换为 void*。

POSIX mmap 说明: http: //opengroup.org/onlinepubs/007908775/xsh/mmap.html

0 投票
3 回答
5697 浏览

java - Java volatile 修饰符和同步块

由多个线程访问但仅在同步块内的变量是否需要 volatile 修饰符?如果不是,为什么?

0 投票
5 回答
18312 浏览

c - volatile 变量作为函数的参数

0 投票
2 回答
1052 浏览

c - 具有易失性和非易失性成员的联合的语义是什么?

更具体地说,我有(简化)以下内容:

如果我从不访问 的第一sizeof(int)data,我可以依靠bits按预期工作吗?

0 投票
2 回答
725 浏览

c# - Using the C# Volatile keyword in Threaded Application

I have a class that has a few arraylists in it.

My main class creates a new instance of this class. My main class has at least 2 threads adding and removing from my class with the arraylists in it. At the moment everything is running fine but I was just wondering if it would be safer to declare my class with the arraylists in it as volatile eg/

0 投票
3 回答
325 浏览

winforms - Windows 窗体中的“易失性”数据绑定是否可能?

假设我正在实现一个 Winforms UI,其中所有命令都遵循以下模式:

触发此类命令的按钮或菜单项应具有以下设置:

  • 属性Enabled绑定到命令的CanExecute
  • 事件Click链接到命令的Execute(由于方法签名不同,通过中间事件处理程序)

麻烦的CanExecute是,INotifyPropertyChanged在这里实现它不会起作用,因为这个属性不能直接修改,而是取决于程序中的其他因素,不需要与命令相关。并且不必PropertyChanged在程序的完全不相关的部分中触发命令事件。

您如何让数据绑定管理器知道何时CanExecute更改?

这是我的问题的一个(纯属虚构)示例:

理想情况下,我希望 UI 不断检查CanExecute(好像它是一个易失性字段),但 AFAIK 这不是 Winforms 数据绑定的工作方式。有没有人有这个问题的解决方案?


注意:我知道 WPF,顺便说一句。我的问题的背景是,我将在 WPF 的大方向上逐步改进现有的 Winforms 应用程序。但实际上使用 WPF 并因此摆脱我所问的问题现在是不可行的。

0 投票
5 回答
615 浏览

c++ - 为什么摆脱 volatile 很危险?

在 C++ 中,volatile处理方式相同const:将指向 volatile 数据的指针传递给不希望volatile修饰符触发编译错误的函数。

为什么危险?很明显const,移除它会破坏const正确性的修饰符;但是有“volatile正确性”这样的东西吗?我无法弄清楚如何将指向易失性数据的指针作为指向非易失性数据的指针传递会导致问题。

编辑让你们知道我为什么volatile首先使用:Mac OS X 的许多OSAtomic函数系列(用于原子增量、减量、加法、减法、比较和交换等)都带有volatile参数。