易失性会影响非易失性变量吗?
|
好的,假设我有一堆变量,其中一个声明为volatile:
int a;
int b;
int c;
volatile int v;
如果一个线程写入所有四个变量(最后写入v
),而另一个线程从所有四个变量读取(首先从v
读取),则第二个线程是否看到第一个线程写入a
,b
和c
的值,即使尽管它们本身并没有被宣布为挥发性的?还是可以看到过时的值?
由于似乎有些混乱:我不是故意在做不安全的事情。我只想了解Java内存模型和volatile
关键字的语义。纯粹的好奇心。
没有找到相关结果
已邀请:
4 个回复
辩谷变充
(例如,锁等)设置事前发生的关系,但会影响所有变量(在Java SE 5 / JDK 1.4中的新Java内存模型(JMM)中)。某种使得它对于非基本挥发物有用...
凄嘛姥
豪抱怒掳
并先从
读取后,您会得到正确的结果(非陈旧的读取),主要问题是如果您这样做
,不能保证其他线程不会修改a / b / c的状态。在这种情况下,将进行状态读取。 如果只修改一次a / b / c + v,您将获得正确的结果。 掌握并发和无锁结构是一件非常困难的事情。道格·里(Doug Lea)着有不错的书,如果您需要开始挖掘的话,克里夫·卡夫(Cliff Click)博士的大部分演讲/文章都是一笔宝贵的财富。
挂帘妈乡