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

从硬件角度来说,原子操作如何保证一致性?
  1. 据我所知,原子指令确保在执行时,没有其他线程可以修改该数据(就像关键部分一样)。我说得对吗?
  2. 这在硬件上是如何实现的?
  3. 硬件如何保证这一点?(硬件内部是否生成三个微指令:解锁,修改,锁定?)
  4. 仅使用互斥锁与使用原子指令之间有什么区别?唯一的区别是指令数量吗(原子指令为 1 条指令,普通互斥锁为多条指令)?
  5. 指令数量的差异(1 与多)是否能保证正确性(如使用互斥锁)和一致性?

答案1

细节很复杂;在单个处理器中,在微代码级别实现一些等效的“锁定、修改、解锁”功能或其他技术就足够简单了。

一旦你有多个处理器,这个问题就变得复杂了,尤其是考虑到缓存的影响。协议如下微星及其衍生品梅西莫西莫伊西,在现代英特尔处理器中支持这一点。

维基百科对此有很好的总结缓存一致性也一样。

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

答案2

在大多数现代 CPU 上,原子操作的工作原理是将受影响的内存地址锁定在 CPU 的缓存中。CPU 在其缓存中独占获取内存地址,然后在操作完成之前不允许任何其他 CPU 获取或共享该地址。

相关内容