mesi模型与java内存模型的关系

来源:2-3 并发模拟-工具

慕粉1048208250

2018-03-31

老师,mesi模型中的高速缓存就是指的java内存模型中的主内存(即堆中和方法区里的共享变量)吗?如果是的话,是不是因为多线程共享同一个高速缓存,从而导致在不同的线程中的工作内存中会导致缓存一致性的问题。而mesi模型是针对多cpu的,为了解决变量在多个cpu的高速缓存中的一致性。

写回答

1回答

Jimin

2018-03-31

你好,MESI模型是CPU缓存的一个模型,主要是通过状态标识当前缓存行与主存里变量实际值的一个关系。Java内存模型相当于是从Java代码层面做了一些规定,比如规定volatile需要保证可见性,在遇到volatile修饰的变量时,由jdk通过在指令里插入内存屏障来保证他每次都可以读到最新的值。通过JMM的一些规定,JDK封装(定义)了最基本的类和关键字供上层调用。

当多个线程操作了相同的资源(比如我们使用的全局变量等),如果我们不做任何同步措施时,我们就很容易读取到某个线程读到某个线程工作内存(从主存读到CPU缓存里的)非最新的值,导致结果有问题,就像我们课程里的计数例子那样。

MESI模型本身不是为解决多个cpu的高速缓存中的一致性而出来的,而是对多CPU缓存的实际的一个描述,真正能解决这个问题的是JMM里那些规定(JDK都是按照这些规定实现),而实际解决就靠我们代码里注意在合适的时候使用正确的并发处理手段。

祝你学习愉快~

0
0

Java高并发编程,构建并发知识体系,提升面试成功率

构建完整并发与高并发知识体系,倍增高薪面试成功率!

3923 学习 · 832 问题

查看课程