std::atomic_ref<T>:: compare_exchange_weak, std::atomic_ref<T>:: compare_exchange_strong
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
|
atomic_ref::compare_exchange_strong
atomic_ref::compare_exchange_weak
|
||||
|
(C++26)
|
||||
|
Operations for arithmetic types
(except
bool
and pointer-to-object)
|
||||
|
Operations for integral types
(except
bool
and pointer-to-object)
|
||||
|
(C++26)
|
||||
|
(C++26)
|
||||
|
Operations for integral types
(except
bool
)
|
||||
| Constants | ||||
|
bool
compare_exchange_weak
(
value_type
&
expected, value_type desired,
|
(1) | (自 C++26 起为 constexpr) |
|
bool
compare_exchange_weak
(
value_type
&
expected, value_type desired,
|
(2) | (自 C++26 起为 constexpr) |
|
bool
compare_exchange_strong
(
value_type
&
expected, value_type desired,
|
(3) | (自 C++26 起为 constexpr) |
|
bool
compare_exchange_strong
(
value_type
&
expected, value_type desired,
|
(4) | (自 C++26 起为 constexpr) |
以原子方式比较所引用对象的 值表示 与 expected 的值表示,若二者按位相等,则将前者替换为 desired (执行读-修改-写操作)。否则,将存储在引用对象中的实际值加载到 expected 中(执行加载操作)。
这些重载仅当 std:: is_const_v < T > 为 false 时参与重载决议。
如果 failure 不是 std:: memory_order_relaxed 、 std:: memory_order_consume 、 std:: memory_order_acquire 或 std:: memory_order_seq_cst ,则行为未定义。
目录 |
参数
| expected | - |
预期值,即期望在
atomic_ref
对象所引用对象中找到的值
|
| desired | - | 若对象值与预期值相符时,将存储至引用对象的目标值 |
| success | - | 比较成功时,读-修改-写操作的内存同步排序方式 |
| failure | - | 比较失败时,加载操作的内存同步排序方式 |
| order | - | 两种操作统一采用的内存同步排序方式 |
返回值
true 表示引用的对象已成功更改, false 表示更改失败。
注释
比较和复制操作是按位进行的(类似于 std::memcmp 和 std::memcpy );不会使用构造函数、赋值运算符或比较运算符。
弱形式 (1,2) 的函数允许出现伪失败,即即使 * this ! = expected 实际相等时也可能表现失败。当在循环中进行比较交换操作时,弱形式版本在某些平台上能提供更好的性能。
当弱比较并交换需要循环而强比较并交换不需要时,除非
value_type
的对象表示可能包含陷阱位,或为同一值提供多种对象表示(例如浮点NaN),否则应优先选择强比较并交换。在这些情况下,弱比较并交换通常更适用,因为它能快速收敛到某个稳定的对象表示。
对于联合体中某些成员参与值表示而其他成员不参与的位,比较并交换操作可能总是失败,因为当这些填充位不参与当前活跃成员的值表示时,它们具有不确定的值。
从不参与对象值表示的填充位将被忽略。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
|
LWG 3508
( P3323R1 ) |
C++20 |
compare_exchange_weak
和
compare_exchange_strong
对于 const T 无意义 |
约束为仅接受非 const
T
|
示例
|
本节内容不完整
原因:缺少示例 |