转载请注明出处:https://blog.csdn.net/martin_ke/article/details/88851393
在之前的文章Java并发编程------线程安全问题:原子性,可见性,有序性和其物理层原理中说到了缓存一致性的问题。那我们我们就聊聊从物理层面来说,缓存一致性是怎么保证的吧~
为什么会产生缓存一致性问题?
- 由于CPU的高速发展,CPU的处理速度和读写内存的速度的脱节。所以出现了存在于内存和处理器之间的高速缓存。每一个核都会去维护其自己的高速缓存,而每个核的高速缓存是互相不可见的。进而就产生了缓存一致性问题。
那么怎么解决缓存一致性问题呢?
答案是:总线锁,缓存锁。
总线锁:
顾名思义,总线锁就是用来锁住总线的,我们可以通过上图来了解总线在这个场景中所处的位置。当一个CPU核执行一个线程去访问数据做操作的时候,它会向总线上发送一个LOCK信号,此时其他的线程想要去请求主内存的时候,就会被阻塞,这样该处理器核心就可以独享这个共享内存。可以理解为,总线锁通过把内存和CPU之间