重排序

重排序
  • 重排序只会在多线程场景下遇到,在单线程场景是不会遇到的。

  • cpu会对代码实现执行做优化重排序,不会对有依赖关系性的做重排序。

    • 编译器优化的重排序。编译器在不改变单线程程序语义放入前提下,可以重新安排语句的执行顺序。
    • 指令级并行的重排序。现代处理器采用了指令级并行技术来将多条指令重叠执行。如果不存在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。
    • 内存系统的重排序。由于处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。
    • enter image description here
  • as-if-serial语义

    • s-if-serial语义的意思指:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器,runtime 和处理器都必须遵守as-if-serial语义。
  • 重排序对多线程的影响:

  • enter image description here

原文地址:https://www.cnblogs.com/frankltf/p/10314308.html