volatile底层原理 --CPU缓存模型

cpu可以直接操作自己对应的告诉缓存,不需要直接频繁的跟主内存通信,这样可以保证cpu的计算的效率非常的高。会有一个问题,
在多个CPU 对主内存的操作,而CUP读取数据是从缓存里面获取。而CPU 对主内存做操作,而另一个CPU是不知道。导致数据不一致性的问题。


image.png

有序性问题

对于代码,同时还有一个问题是指令重排序,编译器和指令器,有的时候为了提高代码执行效率,会将指令重排序,就是说比如下面的代码

flag = false;

//线程1:
prepare(); // 准备信息
flag = true;

//线程2:
while(!flag){
Thread.sleep(2000);
}
execute();

重排序之后,让flag = true先执行了,会导致线程2直接跳过while等待,执行某段代码,结果prepare()方法还没执行,资源还没准备好呢,此时就会导致代码逻辑出现异常。

你可能感兴趣的:(volatile底层原理 --CPU缓存模型)