一针见血系列[9]: volatile的作用是什么?两者的关系是什么?

栏目:一针见血 作者:admin 日期:2018-10-29 评论:0 点击: 1,390 次

volatile关键字的作用主要有两个:

(1)内存可见性,见:http://swiftlet.net/archives/3024

(2)有序性、禁止指令重排相关的内容,见这两篇文章:
http://swiftlet.net/archives/3321

http://swiftlet.net/archives/3020

内存可见性和禁止指令到底有没有关系呢?

我觉得:指令重排是不是最终的思想来源还是内存可见性呢?如果两个互不相关的思想,用到一个事物上,感觉怪怪的。我后来想了想:寄存器和主存的隔离造成了数据的不一致,volatile的初衷是保证数据的强一致性,当赋值基本简单类型的时候,这种一致性很容易实现。但是赋值对象类型的时候,这种一致性分为强一致性和弱一致性,重排是弱一致性,而有序则是强一致性,volatile的目的是强一致性,所以最终它要求指令不得重排。现在我感觉可以把可见性和有序性都统一到一致性上面了。

一针见血系列[9]: volatile的作用是什么?两者的关系是什么?:等您坐沙发呢!

发表评论