问题标签 [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 投票
6 回答
2331 浏览

c# - 多处理器系统中 volatile 关键字的成本是多少?

我们遇到了性能问题,一个潜在的罪魁祸首是集中使用 volatile 单例。具体代码的形式是

这是在一个 8 路盒子上运行的,我们看到上下文切换到每秒 500,000 次。典型的系统资源很好 - 25% cpu util、25% memory util、低 IO、无分页等。

使用 volatile 字段会导致内存屏障或任何类型的 cpu 缓存重新加载吗?或者它只是每次都在主内存之后,只针对那个字段?

0 投票
1 回答
2577 浏览

scala - 我的 Scala 演员的属性是否应该标记为@volatile?

在 Scala 中,如果我有一个简单的类,如下所示:

我的领域sum应该被标记@volatile吗?虽然参与者在逻辑上是单线程的(即消息是按顺序处理的),但各个反应可能发生在单独的线程上,因此state变量可能会在一个线程上被更改,然后从另一个线程读取。

0 投票
4 回答
5392 浏览

c# - 为什么局部变量在 C# 中不能是 volatile 的?

为什么 eventFinished 不能是 volatile 的,这有关系吗?

在我看来,在这种情况下,编译器或运行时可能会变得聪明,并且在 while 循环中“知道” eventFinished 只能为假。尤其是当您考虑将提升变量生成为类的成员并将委托生成为同一类的方法的方式时,从而剥夺了 eventFinished 曾经是局部变量这一事实的优化。

0 投票
8 回答
4488 浏览

java - 在 C/C++/Java 中使用 volatile 说明符

在浏览多线程编程的许多资源时,通常会出现对 volatile 说明符的引用。很明显,至少在 C/C++ 和 Java(1.4 及更早版本)中,使用此关键字不是实现多线程之间同步的可靠方法。这是维基百科列出的(不解释如何)作为该说明符的典型用法:-

  1. 允许访问内存映射设备
  2. 允许在 setjmp 和 longjmp 之间使用变量
  3. 允许在信号处理程序中使用变量
  4. 忙着等待

我可以开始看到这个说明符在上面列出的用法中的作用,但是由于我还没有完全了解这些领域中的每一个,所以我无法弄清楚这个说明符在每种用法中的确切行为。

有人可以解释一下吗?

0 投票
5 回答
7695 浏览

java - 易失性变量“读取”是否与正常读取一样快?

我知道写入volatile变量会从所有 cpu 的内存中刷新它,但是我想知道对 volatile 变量的读取是否与正常读取一样快?

变量可以volatile放置在 cpu 缓存中还是总是从主内存中获取?

0 投票
3 回答
12753 浏览

c# - VB.NET 中的挥发性等价物

可能重复:
如何在 VB.net 中指定 volatile 的等效项?

C#“volatile”的等效 VB.NET 关键字是什么?

如果没有关键字,什么机制是等效的?

0 投票
6 回答
2936 浏览

c# - 在 C# 中赋值给 volatile 变量

我对 C# 的理解说(感谢 Jeff Richter 和 Jon Skeet)赋值是“原子的”。当我们混合读取和写入(递增/递减)时不是这样,因此我们需要在 Interlocked 上使用方法。如果只有 Read & assign 这两个操作都是原子的吗?

0 投票
4 回答
509 浏览

java - java同步问题

我遇到了 Synchronized 不符合我预期的问题,我也尝试使用 volatile 关键字:

共享对象:

线程 1:

线程 2:

调用类:

偶尔我会得到“在利比亚线程刚果很酷”,这不应该发生。我只期待:“在利比亚线程 libya awesome”“在刚果线程 congo cool”

我不希望它们混合在一起。

0 投票
3 回答
6282 浏览

java - Java 线程共享对象同步问题

我遇到了 Synchronized 不符合我预期的问题,我也尝试使用 volatile 关键字:

共享对象:

线程 1:

线程 2:

调用类:

偶尔我会得到“在利比亚线程刚果很酷”,这不应该发生。我只期待:“在利比亚线程 libya awesome”“在刚果线程 congo cool”

我不希望它们混合在一起。

0 投票
3 回答
747 浏览

c# - 如果我在写入变量时锁定,如果读取是原子的,我是否也需要在读取时锁定?

我有一个代码如下的类

设置客户端和上下文时,我锁定如下

我的问题是,如果我只需要自己获取m_client,这样做是否安全?

m_client是引用类型,因此读取(分配给时localClient保证是 atomic,所以这应该在单个 CPU 上正常工作。

我可以(在理论上)创建m_client变量volatile,然后通过防止其他 CPU 的乱序读取,这在多个 cpu 之间是安全的,但问题是,写入时锁定是否可以安全地读取不稳定?

写入“刷新”CPU缓存时是否锁定,以便在读取时不会出现乱序?