atomic::compare_exchange_weak-Methode
Führt einen schwachen atomischen Vergleichs- und Austausch-Vorgang auf *this aus.
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;
Parameter
Exp
Ein Wert vom Typ Ty.Value
Ein Wert vom Typ Ty.Order1
Erstes memory_order-Argument.Order2
Zweites memory_order-Argument.
Rückgabewert
Ein das Ergebnis des Wertevergleichs angebendes bool-Element.
Hinweise
Mit diesem atomischen Vergleichs- und Austausch-Vorgang wird der in *this mit Exp gespeicherte Wert vergleichen. Wenn die Werte sich entsprechen, wird der in *this gespeicherte Wert mit diesem Vorgang durch Val ersetzt, indem ein read-modify-write-Vorgang verwendet und die von Order1 angegebenen Einschränkungen der Speicherreihenfolge angewendet werden. Wenn die Werte sich nicht entsprechen, wird der in *this gespeicherte Wert mit dem Vorgang zum Ersetzen von Exp verwendet und die von Order2 angegebenen Einschränkungen der Arbeitsspeicherreihenfolge werden angewendet.
Mit einem schwachen atomischen Vergleichs- und Austauschvorgang wird einen Austausch ausgeführt, wenn die verglichenen Werte gleich sind. Wenn die Werte nicht gleich sind, ist nicht sichergestellt, dass Austausch mit dem Vorgang ausgeführt wird.
Für Überladungen ohne zweite memory_order wird eine implizite Order2 auf Grundlage des Werts von Order1 verwendet. 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 er darf nicht stärker als der Order1-Wert sein.
Anforderungen
Header: atomisch
Namespace: std