运行在不同cpu的2个线程,如何保证在修改相同变量的时候不发生冲突呢 ?
早期的做法加总线锁:
总线锁 – > 早期多核cup实现一致性的方式,给总线加互斥锁,使另一个核pending住。这样通讯效率很低。
现在的做法使用缓存一致性协议MESI Modified, Exclusive, Shared, Invalid
如下图:
有几个名称先介绍一下:
内存 - 就是我们计算机的存储条容量所代表的内存。当然内存的访问速度大于硬盘速度。
缓存 - cache,是cup中的一个存储设备,嵌入在cup中,存取速度远远大于内存。一般分三级缓存,L3,L2,L1。 从3到1容量越来越小,速度越来越快。
总线 - 用来连接cup和内存的设备,内存和cup之间的数据交换必须通过总线。
寄存器 - 用来存储正在执行的指令代