从硬件角度来看,原子操作如何保证一致性?

Mik*_*ang 8 computer-architecture multi-threaded

  1. 据我所知,原子指令确保在执行时,没有其他线程可以修改该数据(就像临界区一样)。我对么?
  2. 这是如何在硬件中实现的?
  3. 硬件如何保证这一点?(硬件内部是否生成三个微指令:解锁、修改、锁定?)
  4. 仅使用互斥锁与原子指令有什么区别?唯一的区别是指令的数量(原子的 1 条指令,普通互斥体的多条指令)?
  5. 指令数量的差异(1 对多)是否保证正确性(如使用互斥锁)和一致性?

Dav*_*rtz 7

在大多数现代 CPU 上,原子操作通过锁定 CPU 缓存中受影响的内存地址来工作。CPU 仅在其高速缓存中获取内存地址,然后不允许任何其他 CPU 获取或共享该地址,直到操作完成。


Dan*_*man 5

细节很复杂;在单个处理器中,它很简单,可以在微代码级别实现某种等效的“锁定、修改、解锁”或其他技术。

一旦您拥有多个处理器,主题就会变得复杂,尤其是考虑到缓存效应。像MSI和衍生MESIMOSIMOESI这样的协议在现代英特尔处理器中支持这一点。

WikiPedia 在缓存一致性方面也有很好的总结。

关于互斥锁与原子指令:互斥锁或多或少是一种协议,即将使用一位内存以原子方式允许一个人将其设置为特定状态。这意味着它可以使用原子操作来保护非原子操作——双方都同意的协议,假装你可以在比实际更大的范围内实现原子操作。