具有 memory_order_relaxed 的存储是否有可能永远不会到达其他线程?

2023-11-23

假设我有一个线程A写入一个atomic_int x = 0;, using x.store(1, std::memory_order_relaxed);。如果没有任何其他同步方法,其他线程需要多长时间才能看到这一点,使用x.load(std::memory_order_relaxed);?是否有可能写入的值x考虑到标准给出的 C/C++ 内存模型的当前定义,是否完全保持线程本地化?

我手头的实际案例是一个线程B读到atomic_bool经常检查是否必须退出;另一个线程在某个时刻写道true到这个 bool,然后在线程 B 上调用 join() 。显然,我不介意在线程 B 甚至可以看到atomic_bool 已设置之前调用 join() ,也不介意线程 B 之前已经看到更改并退出执行我调用 join()。但我想知道:使用memory_order_relaxed在两侧,是否可以调用 join() 并“永远”阻塞,因为更改永远不会传播到线程 B?

Edit

我联系了 Mark Ba​​tty(数学验证并随后修复 C++ 内存模型要求的大脑)。本来是关于其他事情的(结果是 cppmem 和他的论文中的一个已知错误;所以幸运的是我没有完全出丑,也借此机会向他询问了这个问题;他的回答是:

问:理论上,这样的存储[没有(任何后续)释放操作的内存_顺序_放宽]是否永远不会到达另一个线程?
标记:从理论上讲,是的,但我认为尚未观察到这一点。
问:换句话说,宽松的商店没有意义吗? 无论如何,除非您将它们与某些释放操作结合起来(并且 在另一个线程上获取),假设您希望另一个线程 看见?
标记:是的,几乎所有的用例都使用释放和获取。


这就是标准对此事的全部规定,我相信:

[多线程简介]/25实现应确保原子或同步操作分配的最后一个值(按修改顺序)将在有限的时间内对所有其他线程可见。

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

具有 memory_order_relaxed 的存储是否有可能永远不会到达其他线程? 的相关文章

  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 如何使用MemoryCache代替Timer来触发一个方法?

    以下方法通过等待已运行操作的结果来处理并发请求 对数据的请求可能会使用相同 不同的凭据同时出现 对于每组唯一的凭据 最多可以有一个GetCurrentInternal呼叫正在进行中 当准备就绪时 该呼叫的结果将返回给所有排队的服务员 pri
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何将 #ifdef DEBUG 添加到 Xcode?

    我的项目中有一些代码永远不应该在发布版本中使用 但在测试时很有用 我想做这样的事情 ifdef DEBUG Run my debugging only code endif 在 Xcode 4 中哪里添加 DEBUG 设置 我尝试将其放入
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • XamlReader.Load 在后台线程中。是否可以?

    WPF 应用程序具有从单独的文件加载用户控件的操作 使用XamlReader Load method StreamReader mysr new StreamReader pathToFile DependencyObject rootOb
  • 无法在 Windows 运行时组件库的 UserControl 中创建依赖项属性

    我想在用户控件内创建数据可绑定属性 这个用户控件包含一个 Windows 运行时组件 项目 我使用下面的代码来创建属性 public MyItem CurrentItem get return MyItem GetValue Current
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何使用 watin 中的 FileUploadDialogHandler 访问文件上传对话框

    我正在使用 IE8 和 watin 并尝试通过我的网页测试上传文件 我不能简单地使用 set 方法设置上传文件 例如 ie FileUpload Find ById someId Set C Desktop image jpg 因为上传文本
  • (de)从 CSV 序列化为对象(或者最好是类型对象的列表)

    我是一名 C 程序员 试图学习 C 似乎有一些内置的对象序列化 但我在这里有点不知所措 我被要求将测试数据从 CSV 文件加载到对象集合中 CSV 比 xml 更受青睐 因为它更简单且更易于人类阅读 我们正在创建测试数据来运行单元测试 该集
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • memset 未填充数组

    u32 iterations 5 u32 ecx u32 malloc sizeof u32 iterations memset ecx 0xBAADF00D sizeof u32 iterations printf 8X n ecx 0
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N

随机推荐

  • 从后台线程调用 UIKit 时发出警告

    iOS 的 UIKit 不是线程安全的 这个事实众所周知 我知道这个规则 我很小心 但我还是被咬了 而且时不时地 由此产生的崩溃已经远远远离了对 UIKit 的有问题的后台调用 使得追踪问题成为一种不那么愉快的体验 这个问题似乎很容易解决
  • 从 boost::asio::io_service 中删除所有处理程序而不调用它们

    我想在重用 IO service 之前删除所有处理程序 这可能吗 我正在编写涉及以下内容的单元测试asio io service 在每个测试用例之间 我想从全局中清除处理程序io service 我以为io service reset愿意
  • 为什么 Java 编译器不支持导入的继承?

    在 Java 中 导入与 外部 类相关 因为每个 外部 类都应该在单独的文件中编码 因此 人们可以声称import 类定义之前的指令与该类相关联 有点像注释 现在 如果可以继承父类的导入 这将大大减少源文件的混乱 为什么这不可能 即为什么
  • Python 文本处理:NLTK 和 pandas

    我正在寻找一种在 Python 中构建可与额外数据一起使用的术语文档矩阵的有效方法 我有一些带有一些其他属性的文本数据 我想对文本进行一些分析 并且希望能够将从文本中提取的特征 例如单个单词标记或 LDA 主题 与其他属性相关联 我的计划是
  • AspNet Identity 2.0 电子邮件和用户名重复

    我当前的 Asp Net MVC 5 项目任务电子邮件地址 for UserName 现在我想要upgradeASPNet Identity v1 0 至v2 0利用其所有新功能 see here 然而 ASPNet Identity v2
  • 查找上一页 URL

    我正在尝试查找上一页的 url 例如 用户使用以下命令从页面 A 导航到页面 BServer Redirect B aspx 页面B可以显示引用它的url 我尝试过使用 Response Write Page PreviousPage To
  • Python pandas 将行转换为存在多列的列[重复]

    这个问题在这里已经有答案了 我有一个包含多列的 DF 我想将其从行转换为列 我在堆栈溢出中看到的大多数解决方案仅处理 2 列 From DF PO ID PO Name Region Date Price 1 AA North 07 201
  • 一个线程中对非易失性成员变量的赋值是否保证在另一个线程中可见?

    考虑下面的 Java 示例 请注意 两个类成员变量都没有声明为volatile 如果我正确理解内存模型和 发生在 规则之前 Java 实现可以优化run 方法 使其永远运行 即使另一个线程调用该方法stopNow 方法 发生这种情况是因为里
  • 从数据库代码中删除样板

    看来每次我要执行数据库查询时 我都必须编写以下内容 Connection conn null Statement stmt null ResultSet rset null try conn dataSource getConnection
  • 适当的布尔随机生成器(伯努利分布)

    我很想知道是否有默认的随机布尔生成器randomC 11 库 我一直在使用 int 生成器返回0 or 1然后转换为 bool 但我正在尝试优化我的代码 并认为我可以通过从一开始就使用 bool 生成器 如果存在 来节省成本 See std
  • 砍掉每个变量名称的第一个字母[重复]

    这个问题在这里已经有答案了 我有一些数据看起来像这样 country agdp apop 1 US 100 100 2 Australia 50 50 变量名称是agdp and apop 但我希望他们是gdp and pop 我的真实数据
  • Bootstrap-vue b-table 标头中带有过滤器

    我有一个使用 bootstrap vue 生成的表 显示系统搜索的结果 结果表向用户显示记录 用户可以对它们进行排序和过滤 如何在表格标题下方添加搜索字段 th 使用 bootstrap vue 生成 th
  • 为什么我无法使用 Xamarin 在可移植类库中引用 System.Net.Sockets?

    我正在尝试在可移植类库中使用 System Net Sockets API 以便我的项目可以重用套接字连接代码 但我无法在代码中引用该名称空间 据我了解 PCL 限制您只能使用所有目标平台上可用的程序集 但我的目标是 ios Android
  • C# 与 SharpZipLib - SharpZipLib 与 Winzip 和 XP 的兼容性吗?

    我正在使用SharpZipLib自动压缩某些文件的库 问题是生成的 zip 文件不适用于 Winzip 版本 8 1 或 XP 的压缩文件夹 它确实可以与 7zip 一起使用 Winzip 给出一个错误该文件不是标准 Zip 2 0 格式
  • TabIndex 无法正常工作

    I have a windows form application On the form there are three groupboxs Each groupbox contains some controls Please see
  • 如何在模板绑定中从 Angular 4 访问 getter/setter 访问器?

    假设我有以下 getter setter 方法 get next console log this people this index this index return this people this index set next i
  • 使用 jQuery .filter() 选择 div 中的特定文本

    HTML p class greeting hello my name is kevin what s yours p jQuery p greeting filter function return this text my name i
  • JPA 不生成“删除时设置为空”FK 限制

    我有两个相关的 JPA 注释类 警报和状态 一个警报可以有一个状态 我需要的是能够删除一个状态并将空值 传播 到已删除的该状态中的警报 也就是说 我需要将外键定义为 删除时设置为空 Entity public class Alarm Id
  • PHP 速度与其他语言的比较

    我经常听说 PHP 与其他语言相比速度很慢 速度差异是否足够明显以至于我应该切换到另一种语言 如果是这样 您会推荐什么其他语言 或者有什么好的优化可以加快 PHP 的速度 这个问题经常出现 答案是 是的 它比 C Java C C 等慢 不
  • 具有 memory_order_relaxed 的存储是否有可能永远不会到达其他线程?

    假设我有一个线程A写入一个atomic int x 0 using x store 1 std memory order relaxed 如果没有任何其他同步方法 其他线程需要多长时间才能看到这一点 使用x load std memory