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

来源:3-4 线程安全性-可见性

Echo鑫

2018-05-04

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

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

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

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

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

我这么理解对吗。

写回答

2回答

Jimin

2018-05-04

你好,count++本质是count = count + 1,涉及到读count值、执行count+1、写回存储的count三步,他的根本问题在于这几个操作不是原子性的,而volatile不具备原子性,因此就会出现问题了
0
3
Echo鑫
非常感谢!
2018-05-04
共3条回复

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。


0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程