MOV x86 指令是否实现 C++11 memory_order_release 原子存储?

2023-12-24

根据这个https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html https://www.cl.cam.ac.uk/~pes20/cpp/cpp0xmappings.html, 已发布的商店实现为MOV(进入内存)在 x86(包括 x86-64)上。

根据他的http://en.cppreference.com/w/cpp/atomic/memory_order http://en.cppreference.com/w/cpp/atomic/memory_order

内存顺序释放:

使用此内存顺序的存储操作执行释放 操作:当前线程中的内存访问不能重新排序 继这家店之后。这确保了当前线程中的所有写入 在获取相同原子变量的其他线程中可见 并将依赖项写入原子变量成为 在消耗相同原子的其他线程中可见。

我明白当内存顺序释放使用时,之前完成的所有内存存储都应在此之前完成。

int a;
a = 10;
std::atomic<int> b;
b.store(50, std::memory_order_release); // i can be sure that 'a' is already 10, so processor can't reorder the stores to 'a' and 'b'

问题:怎么可能是一个裸露的MOV指令(没有显式内存栅栏)足以满足此行为吗?如何MOV告诉处理器完成所有先前的存储?


运行时内存重新排序(由 CPU 完成),编译时内存重新排序。请阅读Jeff Preshing 关于编译时重新排序的文章 http://preshing.com/20120625/memory-ordering-at-compile-time/(以及该博客上的许多其他好文章)以获取更多信息。

memory_order_release防止编译器重新排序对数据的访问,以及发出任何必要的防护或特殊指令。在 x86 asm 中,普通加载和存储已经具有获取/释放语义,因此阻止编译时重新排序对于 acq_rel 来说就足够了,但对于 seq_cst 来说则不够。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MOV x86 指令是否实现 C++11 memory_order_release 原子存储? 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 是否需要销毁运算符删除的形式才能真正销毁对象?

    C 20 添加了破坏形式operator delete区别于std destroying delete t范围 它导致delete表达式在调用之前不再销毁对象operator delete 目的是在显式调用对象的析构函数和释放内存之前 允许
  • C#.Net 邮件将进入垃圾邮件文件夹

    我正在从 ASP net Web 应用程序发送电子邮件 邮件发送成功 没有失败 但大多数都进入了垃圾邮件文件夹 请帮助我克服垃圾邮件过滤器 我的发送邮件代码 public void SendMail string FromAddress s
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • Selenium - C# - Webdriver - 无法找到元素

    在 C 中使用 selenium 我试图打开浏览器 导航到 Google 并找到文本搜索字段 我尝试下面的 IWebDriver driver new InternetExplorerDriver C driver Navigate GoT
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • OpenGL:如何检查用户是否支持glGenBuffers()?

    我检查了文档 它说 OpenGL 版本必须至少为 1 5 才能制作glGenBuffers 工作 用户使用的是1 5版本但是函数调用会导致崩溃 这是文档中的错误 还是用户的驱动程序问题 我正在用这个glGenBuffers 对于VBO 我如
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • ASP.NET Core 中间件与过滤器

    在阅读了 ASP NET Core 中间件之后 我对何时应该使用过滤器以及何时应该使用中间件感到困惑 因为它们似乎实现了相同的目标 什么时候应该使用中间件而不是过滤器 9频道有一个关于此的视频 ASP NET 怪物 91 中间件与过滤器 h
  • .NET 和 Mono 之间的开发差异

    我正在研究 Mono 和 NET C 将来当项目开发时我们需要在 Linux 服务器上运行代码 此时我一直在研究 ASP NET MVC 和 Mono 我运行 Ubuntu 发行版 想要开发 Web 应用程序 其他一些开发人员使用 Wind
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐

  • 何时在 Objective-C 中使用 respondsToSelector

    void someMethod if delegate respondsToSelector selector operationShouldProceed if delegate operationShouldProceed do som
  • Kotlin CallsInPlace 合约有哪些好处?

    谁能向我解释一下 Kotlin 有哪些好处callsInPlace https kotlinlang org api latest jvm stdlib kotlin contracts contract builder calls in
  • Python:迁移到新计算机

    我要从装有 Windows XP 的计算机迁移到装有 Windows 7 64 位 的计算机 并且我想在新计算机上安装 Python 我目前正在使用 python 2 7 和 3 2 以及一堆软件包 1 我应该安装64位版本吗 2 我如何知
  • Zend 中的 addmultioption 数组问题

    我正在尝试在我的 Zend Form Element Select 元素中添加选项 monthvalues new Zend Form Element Select month values table new Model DbTable
  • 一开始如何在客户端和服务器端使用环境变量

    当我像这样启动流星项目时 我正在使用环境变量 MYVAR1 foo bar sdf MYVAR2 0 meteor 然后在文件 root lib constants js 中我有 ENV sjobs unisight dfgdfsgf AU
  • Postgres 9.6 - 为 json 数组创建唯一索引

    Sup 我们有一个 Postgres 9 6 表myTable有一排data jsonb NOT NULL DROP TABLE myTable CREATE TABLE myTable data jsonb NOT NULL 我们想要存储
  • 如何手动将库添加到 Visual Studio 2017 项目中?

    我对这个非常基本的问题表示歉意 这个问题肯定已经被问过并回答过 也对我非常过时的术语表示歉意 我寻找答案 但没有找到任何有用的东西 我正在使用 VS 2017 Community 的最新更新 并且我正在尝试手动将我以前称为 函数库 的内容添
  • TypeScript 经常出现问题,并且更喜欢 import 而不是 require

    只要有可能 我都会尝试使用import over require但在某些情况下这会破坏类型检查 处理这个问题的正确方法是什么 是否可以导入 不是全部require可以替换为import s Left Property get does no
  • iPad:分割视图不旋转

    我有以下设置 的一个子类UISplitViewController在构造函数中创建主视图控制器和详细视图控制器 均覆盖的主视图控制器和详细视图控制器shouldAutorotateToInterfaceOrientation回来YES 详细
  • 连接到外部 MYSQL docker 容器

    我有两个正在运行的虚拟机 其中一个 A 在 docker 网络内有 MYSQL 数据库 另一个 B VM 具有我的前端应用程序 docker 容器 我运行我的 MYSQL docker 容器 A 如下所示 docker run name d
  • 当我编辑文件时,Visual Studio 不会跟踪更改或从源代码管理中检出文件

    我是 TFS 的新手 在我的工作中 我将 TFS 项目映射到本地目录 执行获取 一切都按我的预期进行 当我在本地副本上编辑文件时 源代码管理会自动将它们签出以进行编辑 并通过挂起的更改窗口跟踪带有挂起的更改的文件 然后我就用那个窗口全天检查
  • C# 中的模拟文件 IO 静态类

    我是单元测试的新手 我需要模拟 System IO 命名空间中的 File 静态类 我正在使用 Rhinomock 实现此目的的最佳方法是什么 可以说我需要模拟 File Exists File Delete 您无法使用 Rhino 模拟来
  • Hibernate 验证@ManyToOne 至少有一个

    我将 Spring 4 1 与 Hibernate 一起使用 并使用 OneToMany ManyToOne 等注释实体 对于某种情况 A 类 有很多 B 类 如果 A 类没有至少一个与之关联的 B 类 则 A 类无效 有没有一种简单的方法
  • 使用 pyparsing 解析数学表达式

    我正在尝试使用 pyparsing 来解析数学表达式 我知道我可以从 pyparsing 网站复制示例计算器 但我想理解它 以便稍后添加 我来这里是因为我试图理解这个例子 但我做不到 所以我尽力了 我得到了这个 symbol pp Lite
  • 如何找到域名的权威名称服务器?

    如何找到冲突的 DNS 记录的来源 您需要给定域名的 SOA 授权起始 记录 这就是您使用通用可用的nslookup命令行工具 command line gt nslookup gt set querytype soa gt stackov
  • 扩展店件模型

    我需要扩展 Shopware 变体模型 以便添加一些自定义属性 例如金属类型 石头宝石类型 这是基础文章 这些属性将在后端和前端使用 我怎样才能做到这一点 谢谢 扩展 Shopware 核心模型本身根本不可能 根据您尝试扩展的具体模型 有两
  • Maven Surefire 默认情况下顺序执行测试用例吗?

    这是此内容的后续内容question https stackoverflow com questions 7267790 does junit execute test cases sequentially当我深入研究我的研究时我意识到 假
  • iPhone / iPad / iPod 滑动事件 javascript

    我正在寻找 如果可能的话 JavaScript 库 插件来提供滑动事件 然而 我并不追求简单的滑动检测 例如 jqTouch 提供的 我希望创建类似于 iPod 设备上的图像查看器的行为 例如 您向左或向右拖动即可转到下一张图像 您必须将图
  • 在带有边框的画布中的当前剪辑上绘制位图(绘画)

    我正在通过编写游戏来学习 Android 并且在图形 API 方面遇到问题 我想将图像绘制成路径的形状 然后在路径上添加边框 我能够使用路径剪辑图像 但找不到在其上添加边框的方法 我认为这很简单 因为 API 支持 Canvas draw
  • MOV x86 指令是否实现 C++11 memory_order_release 原子存储?

    根据这个https www cl cam ac uk pes20 cpp cpp0xmappings html https www cl cam ac uk pes20 cpp cpp0xmappings html 已发布的商店实现为MOV