Partager via


atomic::compare_exchange_strong, méthode

Effectue une opération atomique de comparaison et d'échange sur *this.

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;

Paramètres

  • Exp
    Valeur de type Ty.

  • Value
    Valeur de type Ty.

  • Order1
    Premier argument de memory_order.

  • Order2
    Deuxième argument de memory_order.

Valeur de retour

Un bool qui indique le résultat de la comparaison de valeurs.

Notes

Cette opération atomique de comparaison et d'échange compare la valeur stockée dans *this avec Exp. Si les valeurs sont égales, l'opération remplace la valeur stockée dans *this avec Val en utilisant une opération de read-modify-write et en appliquant les contraintes d'ordre de la mémoire spécifiées par Order1. Si les valeurs ne sont pas égales, l'opération utilise la valeur stockée dans *this pour remplacer Exp et applique les contraintes d'ordre de mémoire spécifiées par Order2.

Surcharges qui n'ont pas de deuxième memory_order utilise un Order2 implicite qui dépend de la valeur d' Order1. Si Order1 est memory_order_acq_rel, Order2 est memory_order_acquire. Si Order1 est memory_order_release, Order2 est memory_order_relaxed. Dans tous les autres cas, Order2 est égal à Order1.

Pour les surcharges qui acceptent deux paramètres memory_order, la valeur d' Order2 ne doit pas être memory_order_release ni memory_order_acq_rel, et ne doit pas dépasser la valeur d' Order1.

Configuration requise

En-tête : atomique

Espace de noms : std

Voir aussi

Référence

atomic_compare_exchange_strong_explicit, fonction

atomic, structure

<atomic>

memory_order