我觉得应该从失效化队列和写缓存器角度考虑吧。 “有一个cpu(假设是cpu1)把a修改为M状态,另一个会变为I(失效状态)”:cpu1修改了a的值之后,会给总线中发送消息,要求其他CPU把他们高速缓存中a的状态置为I。但是其他CPU收到消息后,为了提高响应效率,是把这个a放入失效化队列,然后就立刻给出回复,表示自己已经把a置成I了,其实缓存条目的修改是要滞后的。 写缓存器也是一样的,对于CPU1来说,要修改a的值,不是马上在高速缓存修改,而是把a的新值写入写缓存器, 从写缓存器同步到高速缓存还需要一点时间。 因为写缓存器和失效化队列是每个内核独有的,不能互相访问,所以会出现在CPU1已经修改了a的值的情况下,CPU2依然读到了旧的a的值。
点赞 3
牛客网
牛客企业服务