超线程能否影响32位处理器上32位int读/写的原子性?

sac*_*hin 0 multithreading hyperthreading atomicity

我已经读过某些地方,超线程可以使32位int(在32位处理器上)读取和写入非原子,即使它是边界对齐的.任何人都可以解释超线程如何影响这个?

Dav*_*rtz 6

如果这是真的,那将是某种特定模型或步进特定的某种可怕的CPU错误.32位读写是原子的,是x86平台属性的基础,是Windows,Linux和许多应用软件所依赖的.

我可以想到的唯一可能是指的是从没有超线程的单核CPU转变为具有超线程的单物理核CPU.在没有超线程的单核x86 CPU上,即使没有锁定前缀,对对齐的32位变量执行读取 - 修改 - 写入操作的单个指令(例如增量)也是原子的.(它们不能保证,它们恰好是.)具有超线程的CPU的行为很像具有两个物理内核的CPU,因此读取 - 修改 - 写入操作(除了交换之外的其他操作)不能保证原子性锁定前缀.

这是一个无关紧要的区别,因为您的软件将遇到的绝大多数CPU将以这种或那种方式具有多个核心.因此,除非锁定,否则即使是对齐的32位值的单指令读 - 修改 - 写操作也不会是原子的.(Exchange是例外,因为即使没有前缀它也会被锁定.)