atomic::compare_exchange_strong Method

Performs an atomic compare and exchange operation on *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

A value of type Ty.

Value

A value of type Ty.

Order1

First memory_order argument.

Order2

Second memory_order argument.

A bool that indicates the result of the value comparison.

This atomic compare and exchange operation compares the value that is stored in *this with Exp. If the values are equal, the operation replaces the value that is stored in *this with Val by using a read-modify-write operation and applying the memory order constraints that are specified by Order1. If the values are not equal, the operation uses the value that is stored in *this to replace Exp and applies the memory order constraints that are specified by Order2.

Overloads that do not have a second memory_order use an implicit Order2 that is based on the value of Order1. If Order1 is memory_order_acq_rel, Order2 is memory_order_acquire. If Order1 is memory_order_release, Order2 is memory_order_relaxed. In all other cases, Order2 is equal to Order1.

For overloads that take two memory_order parameters, the value of Order2 must not be memory_order_release or memory_order_acq_rel, and must not be stronger than the value of Order1.

Header: atomic

Namespace: std

Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft