[Q&A] 什么是数据依赖关系?
如果两个操作访问同一个变量,且这两个操作中有一个为写
操作,此时这两个操作之间就存在数据依赖性。
double pi = 3.14; // A
double r = 1.0; // B
double area = pi * r * r; // C
// A和C之间存在数据依赖关系,
// B和C之间也存在数据依赖关系
[Q&A] 数据依赖分为下列3种类型
上面3种情况,只要重排序两个操作的执行顺序,程序的执行结果就会被改变。
[Q&A] 数据依赖对重排序的影响?
编译器和处理器不会改变存在数据依赖关系的两个操作的执行顺序。
注意 :这里所说的数据依赖性仅针对单个处理器中执行的指令序列和单个线程中执行的操作,不同处理器之间和不同线程之间的数据依赖性不被编译器和处理器考虑。
-----------------------------------------------------------------------------摘自 书名:Java并发编程的艺术 作者:方腾飞;魏鹏;程晓明