主要是因为store bufffer的存在。MESI协议要求各个cpu的cache之间数据同步,但是如果完全按照MESI的要求去做,程序性能会变得很慢,所以数据的修改会先放入到store buffer中异步方式进行同步,cpu在写入storebuffer之后就去执行下一条指令了,当前的这条指令属于执行了一半的状态。所以从结果上看起来反而是下一条指令先执行完,而上一条指令要等待异步方式同步数据的结果返回才算执行完。