次の方法で共有


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
    2 番目の memory_order 引数。

戻り値

値の比較の結果を示す bool。

解説

このアトミックの比較および交換の操作では、*this に格納されている値と Exp を比較します。 値が等しい場合、操作は read-modify-write 操作を使用して、Order1 によって指定されたメモリ順序制約を適用して、*this に格納された値を Val と置き換えます。 値が等しくない場合、操作は *this に格納されている値を使用して Exp を置き換え、Order2 によって指定されたメモリ順序制約を適用します。

比較された値が同一の場合、弱いアトミック比較および交換操作は交換を実行します。 値が同じでない場合、操作による交換の実行は保証されません。

2 番目の memory_order がないオーバーロードは、Order1 の値に基づく暗黙の Order2 を使用します。 Order1 が memory_order_acq_rel の場合、Order2 は memory_order_acquire です。 Order1 が memory_order_release の場合、Order2 は memory_order_relaxed です。 他のすべての場合、Order2 は Order1 と等しくなります。

2 つの memory_order パラメーターを受け取るオーバーロードの場合、Order2 の値は memory_order_release または memory_order_acq_rel ではない必要があり、かつ Order1 の値よりも強い値ではない必要があります。

必要条件

ヘッダー: atomic

名前空間: std

参照

関連項目

atomic_compare_exchange_weak_explicit 関数

atomic 構造体

<atomic>

memory_order