Freigeben über


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

Siehe auch

Referenz

atomic_compare_exchange_weak_explicit-Funktion

atomic-Struktur

<atomic>

memory_order