memory_order_relaxed 有哪些用例

2023-12-22

C++ 内存模型具有宽松的原子性,它不对内存操作提供任何顺序保证。除了我在这里找到的 C 语言的邮箱示例之外:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1525.htm http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1525.htm

基于本文的激励示例:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2153.pdf http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2153.pdf

我对这种类型的同步机制的其他用例感到好奇。


我在工作中经常看到的一个简单例子是统计计数器。如果你 想要计算事件发生的次数,但不需要任何类型 除了使增量安全之外,还可以使用跨线程同步memory_order_relaxed说得通。

static std::atomic<size_t> g_event_count_;

void HandleEvent() {
  // Increment the global count. This operation is safe and correct even
  // if there are other threads concurrently running HandleEvent or
  // PrintStats.
  g_event_count_.fetch_add(1, std::memory_order_relaxed);

  [...]
}

void PrintStats() {
  // Snapshot the "current" value of the counter. "Current" is in scare
  // quotes because the value may change while this function is running.
  // But unlike a plain old size_t, reading from std::atomic<size_t> is
  // safe.
  const size_t event_count =
      g_event_count_.load(std::memory_order_relaxed);

  // Use event_count in a report.
  [...]
}

在这两种情况下,都不需要使用更强的内存顺序。一些 平台,这样做可能会对性能产生负面影响。

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

memory_order_relaxed 有哪些用例 的相关文章

  • WindowsError:[错误 126] 使用 ctypes 加载操作系统时

    python代码无法在Windows 7平台上运行 def libSO lib ctypes cdll LoadLibrary ConsoleApplication2 so lib cfoo2 1 3 当我尝试运行它时 得到来自python
  • Exit() 时是否调用基本对象析构函数?

    我意识到这个问题已经出现过几次 但我试图获得上述问题的明确答案 但我不断遇到相互矛盾的信息 我需要知道的是 当我使用 exit 时 基本类对象是否被破坏 我知道需要删除动态内存 但我的意思更像是 include
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • Environment.CurrentDirectory 与 System.IO.Directory.GetCurrentDirectory

    我正在编写一个 Net WinForms 并不断在调试和发布配置之间切换 并且有一些文件我需要任一配置才能访问 我想做的是将文件放在 BIN 文件夹中的公共目录中 这样它看起来像这样 MyProject Bin CommonFiles My
  • 循环遍历 C 结构中的元素以提取单个元素的值和数据类型

    我有一个要求 我有一个 C 语言的大结构 由大约 30 多个不同数据类型的不同元素组成 typedef struct type1 element1 type2 element2 type3 element3 type2 element4 1
  • 从复选框列表中选择循环生成的复选框中的一个复选框

    抱歉我的英语不好 在我的 ASP NET 网站上 我从 SQL 表导入软件列表 看起来像这样 但实际上要长得多 Microsoft Application Error Reporting br br Microsoft Applicatio
  • 无法注册时间触发的后台任务

    对于 Windows 8 应用程序 在 C Xaml 中 我尝试注册后台任务 很难说 但我想我的后台任务已正确注册 但是当我单击调试位置工具栏上的后台任务名称时 我的应用程序停止工作 没有任何消息 我查看了事件查看器上的日志 得到 具有入口
  • 强制初始化模板类的静态数据成员

    关于模板类的静态数据成员未初始化存在一些问题 不幸的是 这些都没有能够帮助我解决我的具体问题的答案 我有一个模板类 它有一个静态数据成员 必须为特定类型显式实例化 即必须专门化 如果不是这种情况 使用不同的模板函数应该会导致链接器错误 这是
  • 如何使用 Regex.Replace 从字符串中删除数字?

    我需要使用Regex Replace从字符串中删除所有数字和符号 输入示例 123 abcd33输出示例 abcd 请尝试以下操作 var output Regex Replace input d string Empty The d标识符
  • 什么是空终止字符串?

    它与什么不同标准 字符串 http www cplusplus com reference string string 字符串 实际上只是一个数组chars 空终止字符串是指其中包含空字符的字符串 0 标记字符串的结尾 不一定是数组的结尾
  • 在 VS 中运行时如何查看 C# 控制台程序的输出?

    我刚刚编写了一个名为 helloworld 的聪明程序 它是一个 C NET 4 5 控制台应用程序 在扭曲的嵌套逻辑迷宫深处 使用了 Console WriteLine 当我在命令行运行它时 它会运行并且我会看到输出 我可以执行其他命令并
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • 模板外部链接?谁能解释一下吗?

    模板名称具有链接 3 5 非成员函数模板可以有内部链接 任何其他模板名称应具有外部链接 从具有内部链接的模板生成的实体与在其他翻译单元中生成的所有实体不同 我知道使用关键字的外部链接 extern C EX extern C templat
  • C++ 对象用 new 创建,用 free() 销毁;这有多糟糕?

    我正在修改一个相对较大的 C 程序 不幸的是 并不总是清楚我之前的人使用的是 C 还是 C 语法 这是在一所大学的电气工程系 我们 EE 总是想用 C 来做所有事情 不幸的是 在这种情况下 人们实际上可以逃脱惩罚 但是 如果有人创建一个对象
  • Visual Studio 2015:v120 与 v140?

    仅供参考 Win10 x64 我今天开始尝试 Visual Studio 2015 在弄清楚如何运行 C C 部分后 我尝试加载一个大型个人项目 该项目使用非官方的glsdk http glsdk sourceforge net docs
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • WPF DataGrid / ListView 绑定到数组 mvvm

    我们假设你有 N 个整数的数组 表示行数的整数值 在模型中 该整数绑定到视图中的 ComboBox Q1 如何将数组 或数组的各个项目 绑定到 DataGrid 或 ListView 控件 以便 当您更改 ComboBox 值时 只有那么多
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 为什么空循环使用如此多的处理器时间?

    如果我的代码中有一个空的 while 循环 例如 while true 它将把处理器的使用率提高到大约 25 但是 如果我执行以下操作 while true Sleep 1 它只会使用大约1 那么这是为什么呢 更新 感谢所有精彩的回复 但我
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • glkview drawinrect 委托方法仅调用一次

    我正在尝试将 GLKViewController 添加到我的 UserInterfaceViewController 中 我正在使用 raywenderlich 教程中的示例项目 http www raywenderlich com 523
  • 与多个加载项(清单)共享自定义功能区

    我不确定这是一个错误还是设计使然 但我有两个不同的加载项 不同的清单文件 我正在开发 但我希望他们使用相同的自定义功能区 目前来看 这似乎不可能 预期的 用户应该能够执行以下操作 添加第一个名为 A1 的加载项 侧面加载或通过商店 自定义功
  • jquery背景位置x问题

    如何在 Jquery 中执行背景位置 x console log element css background position x Outputs an empty string console log element css backg
  • Java 中的间接子类无法访问超类中的受保护成员

    为什么在 Java 中 不同包中的间接子类无法访问超类的受保护成员 我知道不同包中的直接子类可以访问超类的受保护成员 我认为任何子类都可以访问其继承的受保护成员 EDIT 抱歉新手错误 子类可以访问间接超类的受保护成员 也许你有点困惑 这是
  • macOS 终端应用程序内存增长,消耗大量内存(内存泄漏)?

    我刚刚在 Mac OS 终端中运行了一个 python 程序 并且出现了不寻常的内存泄漏 该程序很简单 如下所示 for i in xrange 1000000000 2000000000 10 i2 i i print i i2 str
  • 如何在netbeans中同时调试多个线程/可运行对象

    我有3节课 创建线程的主类 Thread t new Thread new Class1 Thread t1 new Thread new Class2 t start t1 start Class1 实现 Runnable Class2
  • 使用rdtsc计算系统时间

    假设我的 CPU 中的所有核心都具有相同的频率 从技术上讲 我可以每隔毫秒左右同步每个核心的系统时间和时间戳计数器对 然后根据我正在运行的当前核心 我可以采用当前rdtsc值并使用刻度增量除以核心频率 我可以估计自上次同步系统时间和时间戳计
  • 以 html5 音频流式传输或将 .amr 转换为 .ogg

    我想在我的服务器上流式传输 amr 音频文件 经过几个小时的研究 我很清楚这在 html5 音频的当前状态下是不可行的 在这个令人失望的发现之后 我又花了几个小时寻找一种将 amr 文件转换为 ogg 的简单方法 但结果同样令人失望 令我震
  • 如何在JAVA中自动计算文本字段的输入数值

    我在使用 Netbeans 7 2 的 JAVA 中进行文本字段自动计算时遇到问题 我的问题是 我是否将在文本字段 即入场费 月费 交通费等 中输入数值进行自动添加 然后在文本字段 即会费 中输入数值以从上述自动添加中自动减去 然后再单击提
  • 有没有办法在不知道 ID 的情况下获取框中的所有文件和文件夹?

    有没有办法在不知道 ID 的情况下获取框中的所有文件和文件夹 另外 如果我不知道协作ID 如何获取所有协作对象 您可以通过指定文件夹 id 0 来获取根文件夹和文件 通过此结果 还可以获取更多文件夹或文件
  • 如何在 TypeScript 中全局导入 Chai 'expect()' 函数?

    其他相关问题只是问关于JavaScript的 但我知道Chai https en wikipedia org wiki List of unit testing frameworks JavaScript团队已经提供了 chai regis
  • 即使我使用 JDBC 驱动程序 4.0,为什么还需要在 Tomcat Web 应用程序中调用 Class.forName?

    我正在研究Java Web 在学习过程中我了解到从 JDBC 4 版本开始不需要使用该方法Class forName加载驱动程序 我在此确认了此信息link http docs oracle com javase tutorial jdbc
  • 视图控制器加载两次 - 如何解决?

    问题原因 当我向我的 iOS 项目添加一个新的 Swift 类文件时 我决定犹豫不决 将其重命名 删除并创建一个新文件 我想我其实是太犹豫不决了 所以我给它重新命名了几次 问题 现在 viewController 加载了两次 我确实可以看到
  • Hibernate 无法从数据库获取 SequenceInformation

    我最近将应用程序中的 hibernate 更新到 5 4 4 Final 现在 我在部署过程中遇到了以下异常 ERROR org hibernate engine jdbc env internal JdbcEnvironmentImpl
  • LinkBut​​ton 打开新窗口选项卡

  • 动态改变 HTML 标签

    有没有办法动态更新 HTML 标签 我的 HTML 标签是 p hello p 有没有一种方法可以通过 JavaScript 进行更改hello到另一个值 改变该值的最佳方法是什么 document getElementById somet
  • 如何随机调用函数 unity C# [重复]

    这个问题在这里已经有答案了 我正在制作一款无尽的汽车驾驶游戏 每当玩家汽车靠近其中一辆敌方汽车时 我想随机调用其中一个 switchLane 函数 关键是当你靠近时 让其他一些汽车切换到随机车道 我主要寻找的是一种每次接近时随机调用这 4
  • Scala 模式与集合的匹配

    以下不起作用 object Foo def union s Set Int t Set Int Set Int t match case isEmpty gt s case x xs gt union s x xs case gt thro
  • 需要评估布尔逻辑树的指导

    我似乎找不到正确方向的指针 我什至不确定我应该研究的术语是什么 但无数小时的谷歌搜索似乎让我在转圈 所以希望 Stack 的集体智慧蜂巢溢出可以提供帮助 问题是这样的 我需要一种方法来过滤数据 我只能称之为复合逻辑树 目前该系统实现了一个简
  • memory_order_relaxed 有哪些用例

    C 内存模型具有宽松的原子性 它不对内存操作提供任何顺序保证 除了我在这里找到的 C 语言的邮箱示例之外 http www open std org jtc1 sc22 wg14 www docs n1525 htm http www op