首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::atomic<>同步问题

std::atomic<>同步问题
EN

Stack Overflow用户
提问于 2022-11-14 09:30:01
回答 1查看 67关注 0票数 0

我基本上有两个问题是密切相关的,它们都是基于这样的问题:使用c++ std::原子变量的线程同步问题

正如cppreference.com所解释的:

对于memory_order_acquire: 具有此内存顺序的load操作对受影响的内存位置执行获取操作:在此加载之前,不能对当前线程中的任何读或写进行重新排序。在释放相同原子变量的其他线程中都可以在当前线程中看到。 对于memory_order_release:具有此内存顺序的存储操作执行发布操作:在此存储之后,不能对当前线程中的任何读或写进行重新排序。在当前线程中的所有写入在获得相同原子变量的其他线程中都是可见的。

  1. 为什么人们说必须使用memory_order_seq_cst才能使该示例正常工作?如果memory_order_acquire不能像官方文档所说的那样工作,那么它的目的是什么?文档清楚地说明:释放相同原子变量的其他线程中的所有写入都在当前线程中可见。
  2. 为什么所以问题中的那个例子不应该打印"bad\n"?对我来说没有任何意义。

我做作业的方法是阅读所有可用的文档,例如查询/搜索、搜索等等.但是,我还是不能理解一些事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-14 13:31:19

链接的问题有两个原子变量,您的“cp偏好”引号特别提到“相同的原子变量”。这就是为什么参考文本没有包含链接的问题。

进一步引用cp偏好:memory_order_seq_cst:"...a单总顺序存在,所有线程都以相同的顺序观察的所有修改“。

因此,完成了对两个原子变量的修改。

从本质上讲,memory_order_release的设计问题在于它是GOTO的数据等价物,我们知道这是自Dijkstra以来的一个问题。memory_order_acquire相当于COMEFROM,通常是为愚人节预留的。我还不确定它们是否是C++的好补充。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74429465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档