宽松的原子规则有什么(轻微)差异?

2023-12-02

看到赫伯·萨特斯表现出色后talk about “原子武器”我有点困惑轻松原子例子。

我随身携带了一个atomic in the C++ 内存模型(SC-DRF = 无数据竞争的顺序一致)在加载/读取时执行“获取”。

据我所知,对于负载[和存储],默认值是std::memory_order_seq_cst因此两者是相同的:

myatomic.load();                          // (1)
myatomic.load(std::memory_order_seq_cst); // (2)

到目前为止一切顺利,没有涉及松弛原子(听完演讲后我永远不会使用松弛原子。永远。保证。但是当有人问我时,我可能必须解释......)。

但为什么当我使用时它是“宽松”的语义

myatomic.load(std::memory_order_acquire);   // (3)

Since load is 获取 and 不释放,为什么这与(1) and (2)? 实际上是什么is在这里放松吗?

我唯一能想到的是我误解了load means acquire。如果这是真的,并且默认seq_cst两者都意味着,这不是意味着一个完整的栅栏吗——没有任何东西可以越过该指令,也不能向下传递?我一定误解了那部分。

[并且对称地store and release].


打电话可能有点混乱myatomic.load(std::memory_order_acquire);“宽松原子”负载,因为有std::memory_order_relaxed。有些人描述了任何弱于seq_cst作为“放松”。

您注意到顺序一致加载是获取加载是正确的,但它有一个额外的要求:顺序一致加载也是所有 seq_cst 操作的总全局顺序的一部分。

当您处理多个原子变量时,它就会发挥作用:两个原子的单独修改顺序可能以不同线程的不同相对顺序出现,除非强加顺序一致性。

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

宽松的原子规则有什么(轻微)差异? 的相关文章

随机推荐

  • Qt4 + matplotlib 的 mplot3d

    我正在尝试在 Qt4 GUI 中嵌入 3D 绘图 有其他按钮 这可以使用 matplotlib 的 mplot3d 吗 我知道可以使用 matplotlib backends backend qt4agg 绘制二维图 并且我已经这样做了 如
  • C++ - 排序算法看不到用户定义类型的重载“<”运算符。

    好的 我有 1 个名为的用户定义类型fraction它代表带有分子和分母的普通分数 这是代码 class Fraction private int numerator int denominator public Fraction int
  • 如何使用 JSON 数据填充 React Select?

    如何填充选项反应选择使用下面没有的 JSON 数据value and label特性 sortCode 55 77 42 accountNumber 08488234 accountType Savings Account accountN
  • 替换 JSON 中的属性值

    如果我有一个看起来像这样的 JSON 结构 var user map width 785 height 791 image name image png size width 32 properties firstName Bob last
  • 我可以在 UITextField 中放置不可编辑的文本吗

    我想在 UITextField 内放置一些固定文本 但在插入点之前 有点像这样 他 走向 其中 towaards 是可编辑部分 重点是在上下文中显示可编辑文本 这可能吗 和 或有更好的选择吗 我想你可以通过实施来做到这一点UITextFie
  • 如何使用 opencv android 通过触摸事件提供流体效果/调整位图大小

    我是 OpenCV4Android 和 Android NDK 的新手 努力实现 相对于图像上的触摸点拉伸图像 将头发放在脸上并使用触摸事件相应地拉伸它 例如 虚拟化妆应用程序 问题 使用 Java 时 通过从位图获取矩阵并在触摸事件上重新
  • JavaScript 计算返回 NaN 作为结果

    我正在开发一个 html 页面 它需要日期并显示日期 我正在使用一个称为泽勒同余的公式 但在 JavaScript 中 公式返回结果 NaN 我用谷歌搜索了这个问题 无法找出解决方案 这是接受值的 html
  • 有没有办法编写通用代码来查找 Go 中切片是否包含特定元素?

    我想知道是否有一种通用的方法来编写代码来判断切片是否包含元素 我发现它通常很有用 因为有很多逻辑来首先判断特定元素是否已经在切片中 然后决定要做什么接下来做 但似乎没有一个内置的方法 看在上帝的份上 为什么 我尝试使用interface 这
  • java 1.6 中 String.split 的行为?

    我的代码是 String s 1 23 System out println s split length 并给出输出5 的源代码split is public String split String regex return split
  • 行组内的 ssrs 列可见性

    我有一份报告 其中有多个组 主要在行和一个列组中 但我需要根据所选参数显示某些列 如图所示 当我右键单击专业列时 列可见性不可用 有人可以帮我解决这个问题吗 thanks source ravidowluri com 我自己解决了这个问题
  • Git 子树合并在合并简单的上游更改时报告冲突

    我开始学习 git 1 8 2 中的子树合并 我创建了一个简单的示例来测试将第三方存储库迁移到主项目的更改 我正在关注6 7 Git 工具 子树合并例子 子 项目作为子目录包含在 主 项目中 对 子 项目进行更改后 当我尝试将更改合并到 主
  • EGit 和 GitHub 出现“Auth Failed”错误

    我已经在 Eclipse Helios 上安装了 EGit 插件 并且尝试将其与我的 GitHub 帐户一起使用 但是当我尝试配置它时 出现 Auth Failed 错误 我一直在谷歌上搜索 但没有运气 这似乎是我的密码有问题 但 AFAI
  • “AdaptiveCard”不包含“FromJson”的定义 - Microsoft Bot Framework

    我尝试创建一个自适应卡 从 json 解析它 正如中提到的https learn microsoft com en us adaptive cards create libraries net example parse from json
  • 通过 iisnode 在 iis 上使用 Node.js Express

    我有一个 Node js Express 应用程序 我需要让它在本地 IIS 服务器上运行 以便我可以向它发送有效的 http 请求并处理响应 我使用的是 win 10 和 IIS 10 我遵循了有关使用 iisnode 的不同指南 以便在
  • Katalon studio Java jar 文件

    我想在 Katalon studio 中使用我的 Java 代码 但我不知道哪个 jar我必须导入 Katalon 的文件 我阅读了 Katalon 提供的所有文档 并阅读了所有有关 Katalon 中 java 代码使用的论坛帖子 我没有
  • Heroku 500 内部服务器错误

    我正在开发 Ruby on Rails 应用程序并尝试使用 Heroku 部署它 但是我遇到了一些无法解决的错误 我已经查看了 Heroku 日志 可以看到详细信息 但我不知道出了什么问题 在我看来 问题来自我的 header html e
  • Android - 从另一个活动控制按钮

    我有两项活动 主页活动包含一个列表视图 其中有两个名为checkIn and 方向 当单击 checkIn 按钮时 它会执行一些操作 例如 A 单击方向按钮时 它会启动方向活动 因此 在方向活动中 如果满足某些条件 则会出现一个警报框 询问
  • static const(非整数)成员初始化语法背后的基本原理?

    我知道如何初始化不是整数的静态成员 但我想知道这种语法背后的基本原理是什么 我希望能够将值放入类中 就像使用整数成员一样 class A static const int i 3 我意识到 如果我更改该值 这可能意味着更多的重建 因为它是标
  • Rails 3 电子邮件中的 CSS 图像

    我正在尝试使用 Rails 3 和 Action Mailer 发送一封电子邮件 电子邮件发送得很好 但我希望它采用 HTML 格式 并带有一些基本样式 其中包括背景图像 我知道图像可能会被阻止 直到用户允许显示它们 但我仍然认为最好链接到
  • 宽松的原子规则有什么(轻微)差异?

    看到赫伯 萨特斯表现出色后talk about 原子武器 我有点困惑轻松原子例子 我随身携带了一个atomic in the C 内存模型 SC DRF 无数据竞争的顺序一致 在加载 读取时执行 获取 据我所知 对于负载 和存储 默认值是s