首页 > 后端开发 > C++ > x86 如何在没有显式围栏的情况下实现发布获取语义?

x86 如何在没有显式围栏的情况下实现发布获取语义?

Linda Hamilton
发布: 2024-12-07 14:39:13
原创
545 人浏览过

How Does x86 Achieve Release-Acquire Semantics Without Explicit Fences?

x86 内存模型和释放获取语义

之前关于使用 MOV 实现 memory_order_release 原子存储的查询的后续内容x86 指令中,有人提出了关于如何在 x86 上实现释放和获取而不需要额外的同步机制(如栅栏或

单处理器内存排序

Intel 系统开发手册第 3A 卷第 8 章指出,在单处理器系统中,加载和写入具有一定的顺序保证:

  • 读取不会与其他内容重新排序读取。
  • 写入不会与较早的读取重新排序。
  • 对内存的写入不会与其他写入重新排序,除非在特定情况下。

多-处理器内存排序

但是,多处理器部分文档没有明确提及如何强制加载。它重点关注:

  • 维护内核内的各个处理器排序规则。
  • 所有处理器遵守相同顺序的写入。
  • 写入之间不存在排序不同的处理器。
  • 内存排序遵循因​​果关系(即,尊重传递可见性)。
  • 执行存储的其他处理器的存储订单可见性的一致性。

使用 MOV 获取和释放

了解单处理器内存排序原则至关重要。根据该手册,在访问缓存一致性共享内存时,相同的原则适用于多处理器系统。这意味着重新排序仅在每个 CPU 核心内本地发生。

一旦存储变得全局可见,它就会同时对所有核心可见,从而确保所有核心以一致的顺序观察写入。这就是为什么只需要本地屏障(例如 x86 中的 mfence)来建立顺序一致性。

内存的连贯共享视图

x86 架构维护了连贯的共享视图通过一致的缓存查看内存。英特尔对多处理机制的定义强调了内存一致性和缓存一致性的重要性,以确保所有处理器都能访问相同的数据。

其他资源

  • https://preshing.com/20120913/acquire-and-release-semantics/
  • https://preshing.com/20 120930/weak-vs-strong-memory-models/
  • https://www.cl.cam.ac.uk/~pes20/papers/x86-tso-memory-model.pdf

以上是x86 如何在没有显式围栏的情况下实现发布获取语义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板