gpt4 book ai didi

c++ - 在 C++11 std::atomic 中,用于++、-- 和 += 等运算符的 memory_order 是什么?

转载 作者:太空狗 更新时间:2023-10-29 23:30:57 29 4
gpt4 key购买 nike

似乎与成员函数不同,您无法指定要使用的 memory_order,因此可能最终使用了一些“默认”。

最佳答案

根据 C++ 标准 (§29.7/35),使用非原子调用原子类型 Aoperator++效果基本类型 C,即其中之一:

C A::operator++() volatile noexcept;
C A::operator++() noexcept;

与调用成员函数fetch_add(1)相同,根据§29.5(初始声明),后者是用默认参数声明的:

C fetch_add(C, memory_order = memory_order_seq_cst) volatile noexcept;
C fetch_add(C, memory_order = memory_order_seq_cst) noexcept;

对于整数类型 C,并且:

C* fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst) volatile noexcept;
C* fetch_add(ptrdiff_t, memory_order = memory_order_seq_cst) noexcept;

地址类型。 换句话说,operator++使用的默认内存顺序是memory_order_seq_cst

该标准没有对 operator+= 做出任何此类声明,尽管很自然地假设 operator++ 的情况也适用于 operator+= 在这种情况下。

另请注意标准定义的原子类型函数的一般规则:

(§29.6.5/2) [...] the free functions not ending in _explicit have the semantics of their corresponding _explicit with memory_order arguments of memory_order_seq_cst.

关于c++ - 在 C++11 std::atomic 中,用于++、-- 和 += 等运算符的 memory_order 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593927/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com