x86平台下发送IPI后内存写入操作是否对其他核可见?
Intel x2APIC IPI与内存写入的顺序保证
结论:不允许r1=0,处理器1在IPI中断服务程序中必然能读取到x=1。
依据Intel 64 and IA-32 Architectures SDM vol 3A第9.2节(内存排序)的规则,x2APIC发送IPI所使用的wrmsr指令具备关键的顺序保证:
- 处理器执行
wrmsr发送IPI前,所有已完成的内存写入操作(比如示例中的mov [_x], 1),会被强制完成全局可见性同步,确保这些写入操作的结果在IPI被目标核心接收并处理前,对目标核心可见。 - Intel架构的强内存模型本身就限制了存储操作的重排,再加上
wrmsr这类特权指令隐含的内存屏障效果,不会出现“IPI先被目标核心接收,而之前的内存写入还未同步到该核心”的情况。
示例代码验证:
处理器0的执行序列:
mov [ _x], 1 wrmsr # 使用x2APIC发送IPI
处理器1的中断服务程序:
# 接收IPI后执行 mov r1, [ _x]
在此场景下,r1的取值只能是1,不可能为0。
内容的提问来源于stack exchange,提问作者untitled
相关产品推荐
相关产品推荐

