问题标签 [stdatomic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
115 浏览

c++ - 可以通过 C++11 中的后续顺序一致加载重新排序存储发布吗?

带有std::memory_order_releaseto 某个位置的商店可以重新排序,随后从另一个位置加载std::memory_order_acquire.

但是,具有某个位置的商店std::memory_order_release是否可以在随后从另一个位置加载时重新排序std::memory_order_seq_cst

类似地,一个存储std::memory_order_seq_cst到一个变量的存储是否可以在随后从另一个位置加载时重新排序std::memory_order_acquire

考虑这个例子:

众所周知(http://bartoszmilewski.com/2008/11/05/who-ordered-memory-fences-on-an-x86/)如果两者std::memory_order_seq_cst都被它们的释放/获取对应物替换,输出可能是两个乘以“0”。

在这个例子中,顺序一致性是否可以购买任何东西,或者输出仍然可以是“0”的两倍?

0 投票
1 回答
3562 浏览

c++ - std::mutex 和 std::atomic 的链接问题

我有这个:

单例.h

单例.cpp

主文件

当我尝试构建时,我得到了这个错误(Visual Studios):

错误 1 ​​错误 LNK2001:无法解析的外部符号“public: static struct std::atomic Singleton::m_instance”(?m_instance@Singleton@@2U?$atomic@PAVSingleton@@@std@@A) c:...Singleton。对象单例

和:

错误 2 错误 LNK2001: 无法解析的外部符号“public: static class std::mutex Singleton::m_mutex” (?m_mutex@Singleton@@2Vmutex@std@@A) c:\Users\InusualZ\documents\visual ...Singleton .obj 单例

0 投票
2 回答
717 浏览

c++ - Accessing uninitialized atomic private variable in c++

Supposed I have the following class:

Assume that I initialize all the other variables in the class, except n_ and that this is not thread local storage, so there is no zero initialization.

I create an object of class A, and keep calling incrementN().

If at some point I want the value of n_, and I call getN(), can this cause the load() routine for the atomic n_ to crash?

0 投票
2 回答
35722 浏览

c++ - std::atomic_int 出现“使用已删除函数”错误

我想使用一个std::atomic_int变量。在我的代码中,我有:

这给了我一个编译错误:

知道发生了什么吗?

0 投票
3 回答
443 浏览

c++ - 其他线程是否总是以相同的顺序看到不同线程中对同一位置的两次轻松写入?

在 x86 架构上,存储到同一内存位置具有总顺序,例如,请参阅此视频。C++11 内存模型中的保证是什么?

更准确地说,在

是否r1==1, r2==2, r3==2, r4==1允许结果(在 x86 以外的某些架构上)?如果我将 all 替换memory_orderstd::memory_order_relaxed怎么办?

0 投票
1 回答
136 浏览

c++ - 编译时内存重新排序会导致死锁吗?

在观看有关 LLVM 中 C++11 原子实现的讨论时,有这段代码

我认为这段代码没有数据竞争(正如演讲者所说):它永远不会打印除42.

但是,我不确定是否会打印42. 我的问题是:是否允许编译器在线程 1 中的 while 循环之后重新排序存储,以便两个线程都死锁?或者 C++11 标准的哪一部分阻止了这种行为?

0 投票
3 回答
349 浏览

c++ - 修改前排序一致性

来自http://en.cppreference.com

放宽排序 标记为 std::memory_order_relaxed 的原子操作不是同步操作,它们不对内存进行排序。它们只保证原子性和修改顺序的一致性。例如,x 和 y 最初为零,

允许产生 r1 == r2 == 42,因为尽管 A 在 B 之前排序并且 C 在 D 之前排序,但没有什么可以阻止 D 在 y 的修改顺序中出现在 A 之前,并且 B 在修改中出现在 C 之前x 的顺序。

问题:是什么赋予上述代码属性A 在 B 之前排序而C 在 D 之前排序

编辑:

导致

在带有 -02 选项的 GCC 4.6.1 下

所以我们清楚地看到(A)和(B)已经切换了

0 投票
1 回答
1603 浏览

c++ - 原子比较并有条件地减去如果小于

我管理一些并发线程使用的内存,并且我有一个变量

无符号整数 freeBytes

当我从任务中请求一些内存时

无符号整数字节需要

我必须检查是否

bytesNeeded<=freeBytes

如果是,则保留 freeBytes 的旧值并从 freeBytes bytesNeeded 中原子地减去。

原子库或 x86 是否提供这种可能性?

0 投票
4 回答
1468 浏览

c++ - 对不同线程中不同位置的两次原子写入是否总是以相同的顺序被其他线程看到?

与我之前的问题类似,请考虑此代码

在这种情况下,在 C++11 内存模型下会出现奇怪的结果 吗?如果我要替换 all怎么办?r1==1, r2==0r3==2, r4==0std::memory_order_acq_relstd::memory_order_relaxed

在 x86 上,这样的结果似乎是被禁止的,请参阅这个 SO question,但我一般是在询问 C++11 内存模型。

奖金问题:

我们都同意,std::memory_order_seq_cst奇怪的结果在 C++11 中是不允许的。现在,Herb Sutter 在他著名的atomic<>-weapons talk @ 42:30 中说,std::memory_order_seq_cst这就像std::memory_order_acq_rel -loads std::memory_order_acquire可能不会在std::memory_order_release-writes 之前移动。我看不出上面示例中的这个附加约束如何防止奇怪的结果。谁能解释一下?

0 投票
2 回答
327 浏览

c++ - x86 宽松的排序性能?

由于英特尔提供强大的硬件内存模型,在 C++11 程序中使用“memory_order_relaxed”有什么优势吗?或者只是将其保留为默认的“顺序一致”,因为它没有区别?