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()方法还没执行,资源还没准备好呢,此时就会导致代码逻辑出现异常。
网友评论