x86架构全局不可见load/store操作与内存重排序相关问题咨询
你的理解完全正确。
- CPU的load操作是快照式执行的,只要它已经执行完成(数据已经返回给对应寄存器),后续无论对应内存地址的cache line发生任何状态变化,都不会修改已经拿到的load结果,这些状态变化只会影响该核心之后发起的新的load/存储操作。
- 结合你提到的场景:当前核心的load已经通过
store-to-load forwarding机制,拿到了store queue里还没提交到L1D的本地存储值,后续其他核心将对应cache line置为无效、写入新值并完成全局可见的整个过程,都发生在本次load执行完成之后,所以本次load完全不可能读取到其他线程的新写入值。 - 原帖提到的两个线程同时进入临界区的问题,本质就是两个核心的load都先完成、拿到了各自的本地存储值,而双方的store都晚于对方的load完成全局可见,双方的load都没有感知到对方的写入,最终出现互斥逻辑失效,和你推导的逻辑完全吻合。
内容的提问来源于stack exchange,提问作者CarloC
相关产品推荐
相关产品推荐

