Freigeben über


atomic::compare_exchange_weak-Methode

Führt ein schwaches unteilbares vergleichen und austauschen 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
    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.

Ein schwaches unteilbares vergleichen und Austauschvorgang führt einen Austausch aus, wenn die verglichenen Werte gleich sind.Wenn die Werte nicht übereinstimmen, wird der Vorgang nicht gewährleistet, dass einen Austausch auszuführen.

Ü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

Siehe auch

Referenz

atomic_compare_exchange_weak_explicit-Funktion

atomic-Struktur

<atomic>

memory_order