atomic::compare_exchange_strong-Methode
Führt ein unteilbares vergleichen und austauschen Vorgang auf *this aus.
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;
Parameter
Exp
Ein Wert vom Typ Ty.Value
Ein Wert vom Typ Ty.Order1
Erstes memory_order-Argument.Order2
Zweite memory_order-Argument.
Rückgabewert
bool, das das Ergebnis des Wertsvergleiches angibt.
Hinweise
Dieses atomare vergleichen und Austauschvorgang vergleicht den Wert, der in *this mit Exp gespeichert wird.Wenn die Werte gleich sind, wird der Vorgang den Wert, der in *this mit Val gespeichert wird, indem ein read-modify-write Vorgang verwendet und die Arbeitsspeicherreihenfolgeneinschränkungen anwenden, die von Order1 angegeben werden.Wenn die Werte nicht gleich sind, verwendet der Vorgang den Wert, der in *this gespeichert wurde, um Exp zu ersetzen und übernimmt die Arbeitsspeicherreihenfolgeneinschränkungen, die von Order2 angegeben werden.
Überladungen, die über keine zweite memory_order verfügen, verwenden eine implizite Order2, die entsprechend dem Wert der Order1 ist.Falls Order1memory_order_acq_rel lautet, ist Order2memory_order_acquire.Falls Order1memory_order_release lautet, ist Order2memory_order_relaxed.In allen anderen Fällen ist Order2 gleich Order1.
Für Überladungen, die zwei memory_order-Parameter annehmen, darf der Wert von Order2 nicht memory_order_release oder memory_order_acq_rel sein, und darf nicht als Wert von Order1 stärker sein.
Anforderungen
Header: atomar
Namespace: std