• 什么是重排序
  • 数据依赖的3中类型
  • 什么是as-if-serial语义
  • 重排序会对多线程造成什么影响

什么是重排序

重排序是指编译器或处理器为了优化程序性能,将原指令序列以另一种方式排序,使其不改变单线程下语义时,更高效

数据依赖的3中类型

所谓的数据依赖,就是两个操作访问同一个变量。操作B的执行依赖于操作A对共享变量修改后结果。

  • 读写
  • 写读
  • 写写

在单线程中两个有数据依赖的操作是不会被编译器或处理器重排序的。

什么是as-if-serial语义

说的直白一点,就是在单线程环境下。程序的运行结果和程序员预算的结果是一致的。
也就是说我可能对部分操作进行重排序但是绝对不会影响结果。所以叫做 “仿佛串行”语义

重排序对多线程的影响

重排序不影响单线程的执行结果
很大概率会影响多线程的执行结果