-
内存模型与CPU缓存
本来CPU计算的数字都是从主从main memory中读取的,但是CPU运行的速度比计算机读取内存的速度快,为了补齐这个短板,所以出现了CPU缓从这种东西。
在多CPU系统(或多核处理器——一个芯片上有多个CPU),每个CPU有自己的缓存。两个线程A,B在不同的CPU上同时跑,A对主存的某个共享变量修改后会暂时存在CPU a的缓存中。线程B在CPU b上跑,B仍旧是从主存中读取该共享变量,此时B读到的就是旧值了。就出现了数据的不一致性。
这里出现不一致的条件:必须是多个线程并且访问共享变量,而不是普通变量。
为了解决这个问题,有两种方式:
在总线上加LOCK#锁;
使用缓从一致性协议,比如MESI协议。
2.
并发环境下的可见性、原子性、有序性
原子性:一个操作,要么执行,要么不执行,在执行的过程中不会被打断。
JAVA原子性适用于除了long和do
版权声明:本文为Matthewhou原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。