问题标签 [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.
c# - 我可以避免对很少更改的变量使用锁吗?
我一直在阅读 Joe Duffy 关于并发编程的书。我有一个关于无锁线程的学术问题。
第一:我知道无锁线程充满危险(如果你不相信我,请阅读本书中关于内存模型的部分)
不过,我有一个问题:假设我有一个带有 int 属性的类。
该属性引用的值会被多个线程非常频繁地读取
值会发生变化是极其罕见的,当它发生变化时,将是一个单独的线程来改变它。
如果在另一个使用它的操作正在进行时它确实发生了变化,那么没有人会失去手指(任何人使用它的第一件事就是将它复制到局部变量)
我可以使用锁(或 readerwriterlockslim 来保持读取并发)。我可以将变量标记为 volatile (很多例子都是这样做的)
然而,即使是 volatile 也会对性能造成影响。
如果我在 VolatileWrite 更改时使用它,并让读取访问正常。像这样的东西:
我不认为我会在现实生活中尝试这个,但我对答案很好奇(最重要的是,作为我是否理解我一直在阅读的内存模型内容的检查点)。
java - 如何在 Java 中声明数组元素 volatile?
有没有办法volatile
在 Java 中声明数组元素?IE
声明了数组引用 volatile
,但数组元素(例如a[1]
)仍然不是易失性的。所以我正在寻找类似的东西
但它不是那样工作的。有可能吗?
asp.net - 为什么/何时会话写入容易受到线程终止的影响?
编码:
问题:
当 foo.aspx 从会话中读取“foo”时,它不存在。会话在那里,但“foo”没有任何价值。
我在我们的生产环境中间歇性地观察到这一点。但我在这里并不是要问一个关于 Response.Redirect() 的问题。
说明:
Bertrand Le Roy解释说(粗体字是我的):
现在,重定向所做的是向客户端发送一个特殊的标头,以便它向服务器请求与它等待的页面不同的页面。服务端,发送这个header后,Redirect结束响应。 这是一件非常暴力的事情。 Response.End 实际上会在页面使用 ThreadAbortException 时停止执行。这里真正发生的是 会话令牌在战斗中丢失。
我的收获是 Response.Redirect() 可以通过结束线程来处理。如果它们发生得太接近那种严厉,那可能会威胁到我的会话写作。
问题:
ASP.NET 会话管理如何使它如此容易受到此攻击?Response.Redirect() 代码行直到会话写入行“完成”才开始执行——它怎么会对我的会话写入造成如此大的威胁?
在下一行代码执行之前会话写入没有“完成”怎么办?是否存在会话写入类似(好像从未发生过)丢失的其他场景?
c# - 'volatile' 阻止 C# 中的编译器优化的示例?
据我了解,C# 中的 'volatile' 修饰符有两个作用:
- 根据需要为目标处理器插入栅栏
- 防止某些编译器优化
在 x86 / amd64 上,(1) 无关紧要。这些处理器不需要用于易失语义的栅栏。(不过,ia64 不同。)
所以,我们归结为(2)。但是,对于我尝试过的示例, volatile 对 jit-ted 程序集没有任何影响。
我的问题是:您能否举一个 C# 代码示例的示例,其中在字段上添加“volatile”修饰符会导致不同的 jit-ted 汇编代码?
c++ - 如何在 C++ 中声明使用 malloc 创建的数组是 volatile
我认为以下内容会给我 10 个易失整数
但是,我认为以下内容不会做同样的事情。
如果我对此有误以及如何使用 malloc 获得易失性的项目数组,请纠正我。
谢谢。
c++ - c++ volatile 多线程变量
我正在编写一个 C++ 应用程序。
我有一个类变量,多个线程正在写入。
在 C++ 中,任何可以在编译器“意识到”它正在被更改的情况下进行修改的东西都需要标记为 volatile 对吗?因此,如果我的代码是多线程的,并且一个线程可能会写入一个 var 而另一个线程从它读取,我是否需要标记 var 易失性?
[我没有竞争条件,因为我依赖于对 int 的写入是原子的]
谢谢!
java - Java中的易失性与静态
是否正确地说这static
意味着所有对象的值的volatile
一份副本并且意味着所有线程的值的一份副本?
无论如何,一个static
变量值也将是所有线程的一个值,那么我们为什么要这样做volatile
呢?
c - pthread_exit 和/或 pthread_join 导致 Abort 和 SegFaults
下面的代码是一个简单的线程游戏,它在线程之间切换导致计时器减少。
它适用于 3 个线程,导致 4 个线程的原因和中止(核心转储),并导致 5 个或更多线程的段错误。
任何人都知道为什么会发生这种情况?
c# - Monitor.Wait 是否确保重新读取字段?
人们普遍接受(我相信!) alock
将强制重新加载字段中的任何值(本质上充当内存屏障或栅栏 - 恐怕我在这方面的术语有点松散),结果那些只在 a 内部访问过lock
的字段本身不需要是volatile
.
(如果我已经错了,就说吧!)
这里提出了一个很好的评论,质疑如果代码执行 a 是否也是如此Wait()
- 即一旦它被Pulse()
d,它是否会从内存中重新加载字段,或者它们是否可以在寄存器中(等)。
或者更简单地说:该字段是否需要volatile
确保在 a 之后恢复时获得当前值Wait()
?
看着反射器,Wait
调用到ObjWait
,即managed internalcall
(与 相同 Enter
)。
有问题的场景是:
显然我可以成功,或者我可以将它移出,以便每次它被脉冲时volatile
我退出并重新进入,但我很想知道是否有必要。Monitor
c++ - C++ 语言一些可变的活生生的例子
有人可以展示mutable
关键字用法的实时示例,当它在const
函数中使用时,并在实时示例中解释mutable
andconst
函数以及volatile
成员和函数的区别。