Gil*_*esz 6 x86 assembly memory-barriers
mov 0x0ff, 10
sfence
mov 0x0ff, 12
sfence
Run Code Online (Sandbox Code Playgroud)
它可以由x86-CPU执行:
mov 0x0ff, 12
sfence
Run Code Online (Sandbox Code Playgroud)
?
是的,某些 CPU 可能可以按照您的建议执行它。
即使您mfence
在那里放置了更强大的围栏,或者使用锁定的指令,也肯定不能保证第一次写入不会被优化。
一般来说,这是正确的:排序和防护规则基本上告诉您哪些执行是不允许的,因此保证永远不会发生,但是考虑到允许发生的一组互补的执行,通常不能保证任何特定的执行实际上可以被执行。观察到的。
也就是说,我非常确定,在当前的 x86 芯片上,您总是能够偶尔观察到 10 值(即使完全省略栅栏),尽管有任何存储缓冲区合并,因为您偶尔可能会在两者之间遇到中断商店,让您阅读 10。
尽管如此,这并不能保证——人们当然可以想象像 Denver 或 Transmeta 这样的动态优化 x86 架构可以压缩上述序列,删除栅栏和第一个商店,使 20 成为唯一可观察到的值。
归档时间: |
|
查看次数: |
87 次 |
最近记录: |