• 什么是顺序一致性模型
  • 顺序一致性模型的两大特性
  • 顺序一致性模型和JMM的关系
  • JMM与顺序一致性模型的异同

什么是顺序一致性模型

是一个理论参考模型,处理器或者编程语言的内存模型都会以顺序一致性模型作为参考。
Intel 或者 AMD CPU的内存模型以它为参考
JMM以它为参考

JMM的保证: 程序如果是正确同步的,程序的执行结果和在顺序一致性模型中执行结果相同

顺序一致性模型的2大特性

  • 一个线程中的所有操作必须按照程序的顺序执行
  • 所有线程只能看到一个单一操作顺序,每个操作必须原子执行并对所有线程立即可见

    所有线程看到单一的操作顺序

    说明这个例子可以看书上给我举得一个小例子,A线程有A1,A2,A3三个操作,B线程有B1,B2,B3三个操作。下面看下在顺序一致性模型下执行的结果

  • 顺序一致性模型下-使用监视器同步

image.png

  • 顺序一致性模型下-不是用同步

image.png

也就是说,在顺序一致性模型下,不管我有没有使用同步手段,我A线程和B线程。锁看到的整体执行顺序是一致的

但是JMM在未实现同步策略时,各个线程看到的执行顺序可能不一致。

JMM和顺序一致性模型的关系

JMM是语言层面对顺序一致性模型的定义。JMM参考顺序一致性模型

JMM与顺序一致性模型的异同

顺序一致性模型 JMM
保证单线程内程序按顺序执行 JMM允许单线程下重排序,尽可能为编译器和处理器打开方便之门,但保证执行结果正确
所有线程不管是否有同步措施,只能看到一致的操作执行顺序 不保证所有线程看到的执行顺序一致
保证所有内存读写的原子性 不保证64位的变量读写原子性

总线工作机制

image.png
总线把所有处理器对内存的访问控制为串行的行为。在32位操作系统中,CPUA可能会先读Long类型A变量的高32位之后,等待再次抢到总线,才能把另外32位读出来。中间可能被其他的CPU修改这个内存。