请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

volatile第二个使用条件该怎么理解?

volatile使用条件中,有说到“该变量没有包含在具有其他变量的不变的式子中”,这句话后面的“其他变量的不变XXX式子中”有点没听清楚。

我看他人的笔记上市写的,不变的式子,于是照着这句话去理解,但自我理解的有点模糊,我理解的是:

volatile变量存在的式子,就只能包含它这个变量的值,不能跟其他任何值进行运算。

即首先这个式子是不变的,固定的,然后式子中只存在一个volatile变量。

如果是这样的话,那count++ 这个式子,我感觉符合第二个条件,就一个count变量,式子执行加一操作,属于不变式。之所以不适合,是因为不满足第一个条件,但满足第二个条件。

我这么理解对吗。

正在回答

2回答

你好,count++本质是count = count + 1,涉及到读count值、执行count+1、写回存储的count三步,他的根本问题在于这几个操作不是原子性的,而volatile不具备原子性,因此就会出现问题了
0 回复 有任何疑惑可以回复我~
  • 提问者 Echo鑫 #1
    这个我理解,也听懂了。目前就是对”该变量没有包含在具有其他变量的不变的式子中“有点理解得不太清楚。
    回复 有任何疑惑可以回复我~ 2018-05-04 13:38:36
  • Jimin 回复 提问者 Echo鑫 #2
    参考一下 https://www.ibm.com/developerworks/cn/java/j-jtp06197.html 里的 “正确使用 volatile 变量的条件”的例子看看
    回复 有任何疑惑可以回复我~ 2018-05-04 14:58:12
  • 提问者 Echo鑫 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2018-05-04 15:08:24
zjg23 2018-12-12 17:25:18

这个中文版的“不变式”不好理解。

首先要明确invariants这个词的意思。以下是维基百科的解释,

Invariant (computer science), an expression whose value doesn't change during program execution

invariant 它是一个表达式,在程序运行过程中这个表达式的值不会变。

https://www.ibm.com/developerworks/java/library/j-jtp06197/是英文原版,It contains an invariant -- that the lower bound is always less than or equal to the upper bound.

它这个例子里的invariant,就是lower <= upper,这个表达式的值程序运行过程中一直为true,value < lower 和 value > upper 就说明value参与了这个invariant。


0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信