as-if-seral的语义是:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。
为了遵守as-if-seral语义,编译器和处理器不会对存在数据依赖关系的操作做重排序,因为这种重排序会改变执行结果。
在单线程程序中,对存在控制依赖的操作重排序,不会改变执行结果(这也是as-if-seral语义允许对存在控制依赖的操作做重排序的原因);
但在多线程程序中,对存在控制依赖的操作做重排序,可能会改变程序执行的结果。