atomic::compare_exchange_strong メソッド
*this に対してアトミックの比較および交換の操作を実行します。
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) volatile _NOEXCEPT;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1,
memory_order Order2
) _NOEXCEPT;
bool compare_exchange_strong(
Ty& Exp,
Ty Value,
memory_order Order1 = memory_order_seq_cst
) volatile _NOEXCEPT;
bool compare_exchange_strong(
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