volatile第二个使用条件该怎么理解?
来源:3-4 线程安全性-可见性
Echo鑫
2018-05-04
volatile使用条件中,有说到“该变量没有包含在具有其他变量的不变的式子中”,这句话后面的“其他变量的不变XXX式子中”有点没听清楚。
我看他人的笔记上市写的,不变的式子,于是照着这句话去理解,但自我理解的有点模糊,我理解的是:
volatile变量存在的式子,就只能包含它这个变量的值,不能跟其他任何值进行运算。
即首先这个式子是不变的,固定的,然后式子中只存在一个volatile变量。
如果是这样的话,那count++ 这个式子,我感觉符合第二个条件,就一个count变量,式子执行加一操作,属于不变式。之所以不适合,是因为不满足第一个条件,但满足第二个条件。
我这么理解对吗。
2回答
-
你好,count++本质是count = count + 1,涉及到读count值、执行count+1、写回存储的count三步,他的根本问题在于这几个操作不是原子性的,而volatile不具备原子性,因此就会出现问题了032018-05-04
-
zjg23
2018-12-12
这个中文版的“不变式”不好理解。
首先要明确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。
00
相似问题