méthode d'atomic::compare_exchange_strong
Effectue une comparaison atomique et échangent l'exécution 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
Le second argument d' memory_order .
Valeur de retour
bool qui indique le résultat de la comparaison de valeur.
Notes
Cet atomique compare et d'échange l'exécution 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 à l'aide d'une exécution et d'appliquer d' read-modify-write les contraintes de commande de mémoire qui sont spécifiées par Order1.Si les valeurs ne sont pas égales, l'exécution utilise la valeur stockée dans *this pour remplacer Exp et applique les contraintes de commande de mémoire qui sont spécifiées par Order2.
Surcharges qui n'ont pas d'utilisation d' memory_order de seconde Order2 implicite qui est basée sur 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 d' memory_order , la valeur d' Order2 ne doit pas être memory_order_release ou memory_order_acq_rel, et ne doit pas être plus forte que la valeur d' Order1.
Configuration requise
en-tête : atomique
l'espace de noms : DST