atomic::compare_exchange_weak 方法

执行“原子比较和交换” 操作 *this.

bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) volatile _NOEXCEPT;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1,
   memory_order Order2
) _NOEXCEPT;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) volatile _NOEXCEPT;
bool compare_exchange_weak(
   Ty& Exp,
   Ty Value,
   memory_order Order1 = memory_order_seq_cst
) _NOEXCEPT;

参数

  • Exp
    一个 Ty 类型的值。

  • Value
    一个 Ty 类型的值。

  • Order1
    第一 memory_order 参数。

  • Order2
    第二 memory_order 参数.

返回值

表示值比较结果的bool.

备注

此“基本比较和交换” 操作比较存储在*this 中的值和 Exp。 如果值相等,操作将存储在 *this 中的值替换为和 Val 使用 read-modify-write 适用Order1指定的操作和内存排序约束。 如果值不相等,操作使用在 *this 存储的值替换 Exp 的值并适用由 Order2指定的内存排序约束。

如果比较的值相等,“弱” 基本比较与替换操作执行替换。 但是如果值不相等,操作不能保证执行替换。

没有第二次 memory_order 使用隐式 Order2 基于 Order1值的超负载。 如果 Order1 为 memory_order_acq_rel,则 Order2 为 memory_order_acquire。 如果 Order1 为 memory_order_release,则 Order2 为 memory_order_relaxed。 其他情况下,Order2 与 Order1相等。

为接受两个 memory_order 参数的超负载,Order2 不能为 Order1或 memory_order_release,且不能大于 memory_order_acq_rel的值。

要求

**标头:**原子

命名空间: std

请参见

参考

atomic_compare_exchange_weak_explicit 函数

atomic 结构

<atomic>

memory_order