stdatomic相关内容

x86_64 上的原子双浮点或 SSE/AVX 矢量加载/存储

这里(以及一些 SO 问题)我看到 C++ 没有不支持无锁 std::atomic 之类的东西,并且还不能支持原子 AVX/SSE 向量之类的东西,因为它依赖于 CPU(尽管现在我知道的 CPU,ARM,AArch64 和 x86_64 有向量). 但是在 x86_64 中是否有对 double 或向量的原子操作的汇编级支持?如果是,支持哪些操作(例如加载、存储、加、减、乘)?MSVC++2 ..
发布时间:2021-12-18 08:40:45 C/C++开发

为什么编译器不合并冗余的 std::atomic 写入?

我想知道为什么没有编译器准备将相同值的连续写入合并到单个原子变量,例如: #include std::atomicy(0);无效 f() {自动订购 = std::memory_order_relaxed;y.store(1, 订单);y.store(1, 订单);y.store(1, 订单);} 我尝试过的每个编译器都会发出上述写入的 3 次.哪个合法的、无种族的观察者可以看到上述代码与经过 ..
发布时间:2021-12-06 11:31:59 C/C++开发

c++,std::atomic,std::memory_order 是什么以及如何使用它们?

谁能用简单的英语解释什么是std::memory_order,以及如何将它们与std::atomic一起使用? 我在这里找到了参考资料和几个例子,但根本不明白.http://en.cppreference.com/w/cpp/atomic/memory_order 解决方案 谁能用简单的英语解释一下 std::memory_order 是什么, 我为各种内存排序找到的最好的 ..
发布时间:2021-11-30 14:52:47 C/C++开发

出于排序的目的,原子读-修改-写是一个操作还是两个操作?

考虑原子读-修改-写操作,例如 x.exchange(..., std::memory_order_acq_rel).出于对其他对象的加载和存储进行排序的目的,这是否被视为: 具有获取-释放语义的单个操作? 如果它是 #2,那么尽管在加载之前或存储之后不能对同一线程中的其他操作进行重新排序,但仍然存在在两者之间重新排序的可能性. 举一个具体的例子,考虑: std::atomic ..
发布时间:2021-11-30 14:52:15 C/C++开发

std::atomic<std::string>适当地工作?

我正在阅读 Anthony Williams 的“C++ Concurrency in Action"和第 5 章,其中讨论了新的多线程感知内存模型和原子操作,他说: 为了将 std::atomic 用于某些用户定义的 UDT,此类型必须具有 平凡 复制分配操作员. 据我所知,这意味着我们可以使用 std::atomic 如果以下返回 true: std::is_trivially_ ..
发布时间:2021-11-30 14:51:27 C/C++开发

我什么时候真的需要使用 atomic<bool>而不是布尔?

atomic 不是多余的,因为 bool 本质上是原子的吗?我认为不可能有部分修改的 bool 值.我什么时候真的需要使用 atomic 而不是 bool? 解决方案 没有 C++ 中的类型是“原子性的",除非它是 std::atomic*-某物.那是因为标准是这么说的. 在实践中,用于操作 std::atomic 的实际硬件指令可能(也可能不)与普通 bool 相同code>,但原 ..
发布时间:2021-11-30 14:48:13 C/C++开发

该程序的输出 11 永远不会发生

这次我使用 atomic_fetch_add .这是我如何获得 ra1=1 和 ra2=1 .两个线程都看到 a.fetch_add(1,memory_order_relaxed);当 a=0 时.写入进入存储缓冲区并且对另一个不可见.它们都有 ra=1 和 ra2=1. 我可以推断它是如何打印 12,21 和 22 的. 22 是由它们在 foo 和 bar 中递增 a 给出的,而 ..
发布时间:2021-06-04 20:41:10 C/C++开发

使用 memory_order_seq_cst 输出 10

当我运行这个程序时,我得到的输出为 10,这对我来说似乎是不可能的.我在 x86_64 核心 i3 ubuntu 上运行它. 如果输出是 10,那么 1 一定来自 c 或 d. 同样在线程 t[0] 中,我们将 c 赋值为 1.现在 a 是 1,因为它发生在 c=1 之前.c 等于被线程 1 设置为 1 的 b.所以当我们存储 d 时,它应该是 1,因为 a=1. 可以使用 me ..
发布时间:2021-06-04 20:40:56 C/C++开发

这些在 C++ 中是允许的优化吗?

让 std::atomic;num{0}; 被定义在代码中可访问/可见的地方.C++ 编译器是否允许将以下两个代码中的每一个替换为空代码(什么都不做)?同样,这些优化是否允许在运行时发生?我只是想更好地了解事物的运作方式. num.fetch_add(1,std::memory_order_relaxed);num.fetch_sub(1,std::memory_order_relaxed); ..
发布时间:2021-06-04 20:32:56 C/C++开发

这个信封实现是否正确使用 C++11 原子?

我编写了一个简单的“信封"类,以确保我正确理解 C++11 原子语义.我有一个标头和一个有效载荷,作者清除标头,填充有效载荷,然后用递增的整数填充标头.这个想法是,读取器然后可以读取头,memcpy 输出有效载荷,再次读取头,如果头相同,则读取器可以假设他们成功复制了有效载荷.读者可能会错过一些更新是可以的,但他们无法获得撕裂的更新(其中有来自不同更新的混合字节).只有一个读者和一个作者. ..
发布时间:2021-06-04 20:14:36 C/C++开发