atomic::compare_exchange_weak — Metoda
Wykonuje słabe porównanie atomowe i wymianę operacji na *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;
Parametry
Exp
Wartość typu Ty.Value
Wartość typu Ty.Order1
Pierwszy memory_order argument.Order2
Drugi memory_order argument.
Wartość zwracana
bool , która wskazuje wynik porównania wartości.
Uwagi
Ta operacja porównanie atomiczne i wymiana porównuje wartość, która jest przechowywana w *this z Exp.Jeśli wartości są równe, operacja zastępuje wartość, która jest przechowywana w *this z Val za pomocą operacji read-modify-write i stosując ograniczenia zlecenia pamięci, które są określone przez Order1.Jeśli wartości nie są równe, operacja wykorzystuje wartość, która jest przechowywana w *this, aby zastąpić Exp i zastosować ograniczenia zlecenia pamięci, które są określone przez Order2.
Słaba, niepodzielna operacja porównania i wymiany wykonuje wymianę w przypadku, gdy porównane wartości są równe.Jeśli wartości nie są równe, działanie nie jest gwarantowane do wykonania wymiany.
Przeciążenia, które nie mają drugiego memory_order używają ukrytego Order2 opartego na wartości Order1.Jeśli Order1 ma wartość memory_order_acq_rel, Order2 ma wartość memory_order_acquire.Jeśli Order1 ma wartość memory_order_release, Order2 ma wartość memory_order_relaxed.We wszystkich innych przypadkach Order2 jest równy Order1.
W przypadku przeciążeń, które pobierają dwa parametry memory_order, wartość Order2 nie może być memory_order_release lub memory_order_acq_reli nie może być silniejsza niż wartość Order1.
Wymagania
Nagłówek: niepodzielny
Przestrzeń nazw: std