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

c# - 我可以避免对很少更改的变量使用锁吗?

我一直在阅读 Joe Duffy 关于并发编程的书。我有一个关于无锁线程的学术问题。

第一:我知道无锁线程充满危险(如果你不相信我,请阅读本书中关于内存模型的部分)

不过,我有一个问题:假设我有一个带有 int 属性的类。

该属性引用的值会被多个线程非常频繁地读取

值会发生变化是极其罕见的,当它发生变化时,将是一个单独的线程来改变它。

如果在另一个使用它的操作正在进行时它确实发生了变化,那么没有人会失去手指(任何人使用它的第一件事就是将它复制到局部变量)

我可以使用锁(或 readerwriterlockslim 来保持读取并发)。我可以将变量标记为 volatile (很多例子都是这样做的)

然而,即使是 volatile 也会对性能造成影响。

如果我在 VolatileWrite 更改时使用它,并让读取访问正常。像这样的东西:

我不认为我会在现实生活中尝试这个,但我对答案很好奇(最重要的是,作为我是否理解我一直在阅读的内存模型内容的检查点)。

0 投票
4 回答
14882 浏览

java - 如何在 Java 中声明数组元素 volatile?

有没有办法volatile在 Java 中声明数组元素?IE

声明了数组引用 volatile,但数组元素(例如a[1])仍然不是易失性的。所以我正在寻找类似的东西

但它不是那样工作的。有可能吗?

0 投票
3 回答
754 浏览

asp.net - 为什么/何时会话写入容易受到线程终止的影响?

编码:

问题:

当 foo.aspx 从会话中读取“foo”时,它不存在。会话在那里,但“foo”没有任何价值。

我在我们的生产环境中间歇性地观察到这一点。但我在这里并不是要问一个关于 Response.Redirect() 的问题

说明:

Bertrand Le Roy解释说(粗体字是我的):

现在,重定向所做的是向客户端发送一个特殊的标头,以便它向服务器请求与它等待的页面不同的页面。服务端,发送这个header后,Redirect结束响应。 这是一件非常暴力的事情。 Response.End 实际上会在页面使用 ThreadAbortException 时停止执行。这里真正发生的是 会话令牌在战斗中丢失。

我的收获是 Response.Redirect() 可以通过结束线程来处理。如果它们发生得太接近那种严厉,那可能会威胁到我的会话写作。

问题:

ASP.NET 会话管理如何使它如此容易受到此攻击?Response.Redirect() 代码行直到会话写入行“完成”才开始执行——它怎么会对我的会话写入造成如此大的威胁?

在下一行代码执行之前会话写入没有“完成”怎么办?是否存在会话写入类似(好像从未发生过)丢失的其他场景?

0 投票
2 回答
1255 浏览

c# - 'volatile' 阻止 C# 中的编译器优化的示例?

据我了解,C# 中的 'volatile' 修饰符有两个作用:

  1. 根据需要为目标处理器插入栅栏
  2. 防止某些编译器优化

在 x86 / amd64 上,(1) 无关紧要。这些处理器不需要用于易失语义的栅栏。(不过,ia64 不同。)

所以,我们归结为(2)。但是,对于我尝试过的示例, volatile 对 jit-ted 程序集没有任何影响。

我的问题是:您能否举一个 C# 代码示例的示例,其中在字段上添加“volatile”修饰符会导致不同的 jit-ted 汇编代码?

0 投票
5 回答
7234 浏览

c++ - 如何在 C++ 中声明使用 malloc 创建的数组是 volatile

我认为以下内容会给我 10 个易失整数

但是,我认为以下内容不会做同样的事情。

如果我对此有误以及如何使用 malloc 获得易失性的项目数组,请纠正我。

谢谢。

0 投票
6 回答
5028 浏览

c++ - c++ volatile 多线程变量

我正在编写一个 C++ 应用程序。

我有一个类变量,多个线程正在写入。

在 C++ 中,任何可以在编译器“意识到”它正在被更改的情况下进行修改的东西都需要标记为 volatile 对吗?因此,如果我的代码是多线程的,并且一个线程可能会写入一个 var 而另一个线程从它读取,我是否需要标记 var 易失性?

[我没有竞争条件,因为我依赖于对 int 的写入是原子的]

谢谢!

0 投票
8 回答
162910 浏览

java - Java中的易失性与静态

是否正确地说这static意味着所有对象的值的volatile一份副本并且意味着所有线程的值的一份副本?

无论如何,一个static变量值也将是所有线程的一个值,那么我们为什么要这样做volatile呢?

0 投票
1 回答
3292 浏览

c - pthread_exit 和/或 pthread_join 导致 Abort 和 SegFaults

下面的代码是一个简单的线程游戏,它在线程之间切换导致计时器减少。

它适用于 3 个线程,导致 4 个线程的原因和中止(核心转储),并导致 5 个或更多线程的段错误。

任何人都知道为什么会发生这种情况?

0 投票
3 回答
1606 浏览

c# - Monitor.Wait 是否确保重新读取字段?

人们普遍接受(我相信!) alock将强制重新加载字段中的任何值(本质上充当内存屏障或栅栏 - 恐怕我在这方面的术语有点松散),结果那些只在 a 内部访问lock的字段本身不需要是volatile.

(如果我已经错了,就说吧!)

这里提出了一个很好的评论,质疑如果代码执行 a 是否也是如此Wait()- 即一旦它被Pulse()d,它是否会从内存中重新加载字段,或者它们是否可以在寄存器中(等)。

或者更简单地说:该字段是否需要volatile确保在 a 之后恢复时获得当前值Wait()

看着反射器,Wait调用到ObjWait,即managed internalcall(与 相同 Enter)。

有问题的场景是:

显然我可以成功,或者我可以将它移出,以便每次它被脉冲时volatile我退出并重新进入,但我很想知道是否有必要Monitor

0 投票
3 回答
1047 浏览

c++ - C++ 语言一些可变的活生生的例子

有人可以展示mutable关键字用法的实时示例,当它在const函数中使用时,并在实时示例中解释mutableandconst函数以及volatile成员和函数的区别。