如何使数组易失?因为正如我所了解的那样,使数组易失是不安全的吗?
将数组声明为volatile并 不能 对其字段进行volatile访问。您是在声明引用本身是可变的,而不是元素。
换句话说,你声明 挥发性组 的元素,而不是一个 集易挥发元素 。
解决方案是AtomicIntegerArray
在要使用整数的情况下使用。另一种方法(但有点难看)是每次您编辑字段时都将对数组的引用重写。
您可以这样做:
arr = arr;
(就像我说的…丑陋)
如果是,如果被添加到数组中,强制转换会受到什么影响?谢谢你! 编辑:@cacahuete Frito链接了一个非常相似的问题:带有'volatile'数组的'memcpy((void*)dest,src,n)'安全吗?
我对下面的代码段有一个问题。结果可能有一个结果[0,1,0](这是用JCStress执行的测试)。那么这是怎么发生的呢?我认为数据写入(data=1)应该在Actor2(guard2=1)中写入到guard2之前执行。我说得对吗?我问,因为很多时候我读到挥发物周围的说明没有重新排序。此外,根据这一点:http://tutorials.jenkov.com/java-concurrency/vola
在阅读了这个问题和这个(尤其是第二个答案)之后,我对volatile及其关于记忆障碍的语义感到非常困惑。 在上面的例子中,我们写入一个易失性变量,这会导致一个mitch,这反过来会将所有挂起的存储缓冲区/加载缓冲区刷新到主缓存,使其他缓存行无效。 然而,非易失性字段可以优化并存储在寄存器中,例如?那么,我们如何才能确保给定一个写入易失性变量之前的所有状态变化都是可见的呢?如果我们有1000件东西呢
(在单CPU的情况下)为了理解volatile——我知道volatile强制线程使用主内存,并且不会将副本保留在其本地内存中。 在一篇StackOverFlow帖子中,我看到java线程使用CPU缓存,而使用volatile则会强制使用主内存 线程缓存和Java内存模型。 如果是这种情况,那么应该没有内存可见性的问题,因为一个线程可以看到其他线程写的值(假设在单个核心CPU上,我们将有单个缓存)。
来自C/C++,我对Java中的volatile对象行为有点困惑。 null faik,volatile意味着b引用的“book对象”应该在主内存中。编译器可能在内部实现引用作为指针,因此b指针可能位于缓存中。我的理解是,volatile是对象的限定符,而不是引用/指针的限定符。 问题是:在使用方法中,本地引用不是易失性的。这个“本地”引用会不会把底层的Book对象从主存带到缓存中,实质上使对象不
问题内容: Oracle有关原子访问的文档(位于http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html)说: “一个易失性变量建立了一个事前发生的关系…。这意味着……当线程读取一个易失性变量时,它不仅看到了对易失性的最新更改,而且还看到了导致该代码的副作用改变。” 我无法解决这个问题。我了解volatile变