atomic
Structure
Décrit un objet qui effectue des atomic
opérations sur une valeur stockée de type Ty
.
Syntaxe
template <class Ty>
struct atomic;
Membres
Membre | Description |
---|---|
Constructeur | |
atomic |
Construit un objet atomique. |
Opérateurs | |
atomic::operator Ty |
Lit et retourne la valeur stockée. (atomic::load ) |
atomic::operator= |
Utilise une valeur spécifiée pour remplacer la valeur stockée. (atomic::store ) |
atomic::operator++ |
Incrémente la valeur stockée. Utilisé uniquement par les spécialisations intégrales et de pointeur. |
atomic::operator+= |
Ajoute une valeur spécifiée à la valeur stockée. Utilisé uniquement par les spécialisations intégrales et de pointeur. |
atomic::operator-- |
Décrémente la valeur stockée . Utilisé uniquement par les spécialisations intégrales et de pointeur. |
atomic::operator-= |
Soustrait une valeur spécifiée de la valeur stockée. Utilisé uniquement par les spécialisations intégrales et de pointeur. |
atomic::operator&= |
Effectue un « et » au niveau du bit (& ) sur une valeur spécifiée et la valeur stockée. Utilisé uniquement par les spécialisations intégrales. |
atomic::operator|= |
Effectue un « ou » au niveau du bit (| ) sur une valeur spécifiée et la valeur stockée. Utilisé uniquement par les spécialisations intégrales. |
atomic::operator^= |
Effectue une opération « exclusive » au niveau du bit (^ ) sur une valeur spécifiée et la valeur stockée. Utilisé uniquement par les spécialisations intégrales. |
Fonctions | |
compare_exchange_strong |
Effectue une opération atomic_compare_and_exchange sur this et retourne le résultat. |
compare_exchange_weak |
Effectue une opération weak_atomic_compare_and_exchange sur this et retourne le résultat. |
fetch_add |
Ajoute une valeur spécifiée à la valeur stockée. |
fetch_and |
Effectue un « et » au niveau du bit (& ) sur une valeur spécifiée et la valeur stockée. |
fetch_or |
Effectue un « ou » au niveau du bit (| ) sur une valeur spécifiée et la valeur stockée. |
fetch_sub |
Soustrait une valeur spécifiée de la valeur stockée. |
fetch_xor |
Effectue une opération « exclusive » au niveau du bit (^ ) sur une valeur spécifiée et la valeur stockée. |
is_lock_free |
Spécifie si atomic les opérations sur this sont sans verrou. Un atomic type est libre si aucune opération sur ce type n’utilise atomic des verrous. |
load |
Lit et retourne la valeur stockée. |
store |
Utilise une valeur spécifiée pour remplacer la valeur stockée. |
Notes
Le type Ty
doit être copiable de manière triviale. Autrement dit, l’utilisation memcpy
pour copier ses octets doit produire un objet valide Ty
qui se compare à l’objet d’origine. Les compare_exchange_weak
fonctions membres et compare_exchange_strong
les fonctions membres permettent memcmp
de déterminer si deux Ty
valeurs sont égales. Ces fonctions n’utilisent pas de Ty
-defined operator==
. Les fonctions membres de atomic
utilisent memcpy
pour copier les valeurs de type Ty
.
Une spécialisation partielle, atomic<Ty*>
, existe pour tous les types de pointeur. La spécialisation permet d’ajouter un décalage à la valeur de pointeur gérée ou de lui soustraire un décalage. Les opérations arithmétiques prennent un argument de type ptrdiff_t
et ajustent cet argument en fonction de la taille de Ty
pour être cohérent avec l’arithmétique d’adresse ordinaire.
Une spécialisation existe pour chaque type intégral sauf bool
. Chaque spécialisation fournit un ensemble complet de méthodes pour les opérations atomiques arithmétiques et logiques.
atomic<char>
atomic<signed char>
atomic<unsigned char>
atomic<char16_t>
atomic<char32_t>
atomic<wchar_t>
atomic<short>
atomic<unsigned short>
atomic<int>
atomic<unsigned int>
atomic<long>
atomic<unsigned long>
atomic<long long>
atomic<unsigned long long>
Les spécialisations intégrales sont dérivées des types atomic_integral
correspondants. Par exemple, atomic<unsigned int>
est dérivé de atomic_uint
.
Spécifications
En-tête : <atomic>
Espace de noms : std
atomic::atomic
Construit un objet atomique.
atomic();
atomic( const atomic& );
atomic( Ty Value ) noexcept;
Paramètres
Value
Valeur d’initialisation.
Notes
Les objets atomiques ne peuvent pas être copiés ou déplacés.
Les objets qui sont des instanciations de atomic<Ty>
peuvent être initialisés uniquement par le constructeur qui prend un argument de type Ty
et non à l’aide de l’initialisation d’agrégation. Toutefois, atomic_integral
les objets peuvent être initialisés uniquement à l’aide de l’initialisation d’agrégation.
atomic<int> ai0 = ATOMIC_VAR_INIT(0);
atomic<int> ai1(0);
atomic::operator Ty
Opérateur du type spécifié dans le modèle. atomic<Ty>
Récupère la valeur stockée dans *this
.
atomic<Ty>::operator Ty() const volatile noexcept;
atomic<Ty>::operator Ty() const noexcept;
Notes
Cet opérateur applique le memory_order_seq_cst
memory_order
.
atomic::operator=
Stocke une valeur spécifiée.
Ty operator=(
Ty Value
) volatile noexcept;
Ty operator=(
Ty Value
) noexcept;
Paramètres
Value
Objet Ty
.
Valeur de retour
Retourne Value
.
atomic::operator++
Incrémente la valeur stockée. Utilisé uniquement par les spécialisations intégrales et de pointeur.
Ty atomic<Ty>::operator++(int) volatile noexcept;
Ty atomic<Ty>::operator++(int) noexcept;
Ty atomic<Ty>::operator++() volatile noexcept;
Ty atomic<Ty>::operator++() noexcept;
Valeur de retour
Les deux premiers opérateurs retournent la valeur incrémentée ; les deux derniers opérateurs retournent la valeur avant l’incrément. Les opérateurs utilisent le memory_order_seq_cst
memory_order
.
atomic::operator+=
Ajoute une valeur spécifiée à la valeur stockée. Utilisé uniquement par les spécialisations intégrales et de pointeur.
Ty atomic<Ty>::operator+=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator+=(
Ty Value
) noexcept;
Paramètres
Value
Valeur intégrale ou pointeur.
Valeur de retour
Objet Ty
qui contient le résultat de l’ajout.
Notes
Cet opérateur utilise le memory_order_seq_cst
memory_order
.
atomic::operator--
Décrémente la valeur stockée . Utilisé uniquement par les spécialisations intégrales et de pointeur.
Ty atomic<Ty>::operator--(int) volatile noexcept;
Ty atomic<Ty>::operator--(int) noexcept;
Ty atomic<Ty>::operator--() volatile noexcept;
Ty atomic<Ty>::operator--() noexcept;
Valeur de retour
Les deux premiers opérateurs retournent la valeur décrémentée ; les deux derniers opérateurs retournent la valeur avant la décrémentation. Les opérateurs utilisent le memory_order_seq_cst
memory_order
.
atomic::operator-=
Soustrait une valeur spécifiée de la valeur stockée. Utilisé uniquement par les spécialisations intégrales et de pointeur.
Ty atomic<Ty>::operator-=(
Ty Value
) volatile noexcept;
Ty atomic<Ty>::operator-=(
Ty Value
) noexcept;
Paramètres
Value
Valeur intégrale ou pointeur.
Valeur de retour
Objet Ty
qui contient le résultat de la soustraction.
Notes
Cet opérateur utilise le memory_order_seq_cst
memory_order
.
atomic::operator&=
Effectue un « and » au niveau du bit (&
) sur une valeur spécifiée et la valeur stockée de *this
. Utilisé uniquement par les spécialisations intégrales.
atomic<Ty>::operator&= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator&= (
Ty Value
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Valeur de retour
Résultat du « et » au niveau du bit (&
).
Notes
Cet opérateur effectue une opération en lecture-modification-écriture pour remplacer la valeur stockée d’un « et » au niveau du *this
bit () et Value
de la valeur actuelle stockée dans *this
, dans les contraintes du memory_order_seq_cst
memory_order
.&
atomic::operator|=
Effectue un « or » au niveau du bit (|
) sur une valeur spécifiée et la valeur stockée de *this
. Utilisé uniquement par les spécialisations intégrales.
atomic<Ty>::operator|= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator|= (
Ty Value
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Valeur de retour
Résultat du bit « ou » (|
).
Notes
Cet opérateur effectue une opération en lecture-modification-écriture pour remplacer la valeur stockée par un « ou » au|
niveau du Value
*this
bit et la valeur actuelle stockée dans *this
, dans les contraintes des memory_order_seq_cst
memory_order
contraintes.
atomic::operator^=
Effectue une opération « exclusive » au niveau du bit (^
) sur une valeur spécifiée et la valeur stockée de *this
. Utilisé uniquement par les spécialisations intégrales.
atomic<Ty>::operator^= (
Ty Value
) volatile noexcept;
atomic<Ty>::operator^= (
Ty Value
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Valeur de retour
Résultat du bit « exclusif ou » (^
).
Notes
Cet opérateur effectue une opération en lecture-modification-écriture pour remplacer la valeur stockée par *this
un bit « exclusif ou » (^
) et Value
la valeur actuelle stockée dans *this
, dans les contraintes des memory_order_seq_cst
memory_order
contraintes.
atomic::compare_exchange_strong
Effectue une opération de comparaison atomique 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 memory_order
argument.
Order2
Deuxième argument memory_order
.
Valeur de retour
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 avec *this
Exp
. Si les valeurs sont égales, l’opération remplace la valeur stockée par *this
Value
une opération en lecture-modification-écriture et l’application des contraintes d’ordre de mémoire spécifiées par Order1
. Si les valeurs ne sont pas égales, l’opération utilise la valeur stockée pour *this
remplacer Exp
et applique les contraintes d’ordre de mémoire spécifiées par Order2
.
Les surcharges qui n’ont pas de seconde memory_order
utilisent un implicite Order2
basé sur la valeur de 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 prennent deux memory_order
paramètres, la valeur de Order2
ne doit pas être memory_order_release
ou memory_order_acq_rel
ne doit pas être plus forte que la valeur de Order1
.
atomic::compare_exchange_weak
Effectue une opération de comparaison atomique faible et d’échange sur *this
.
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;
Paramètres
Exp
Valeur de type Ty
.
Value
Valeur de type Ty
.
Order1
Premier memory_order
argument.
Order2
Deuxième argument memory_order
.
Valeur de retour
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 avec *this
Exp
. Si les valeurs sont égales, l’opération remplace la valeur stockée par *this
Value
une opération en lecture-modification-écriture et l’application des contraintes d’ordre de mémoire spécifiées par Order1
. Si les valeurs ne sont pas égales, l’opération utilise la valeur stockée pour *this
remplacer Exp
et applique les contraintes d’ordre de mémoire spécifiées par Order2
.
Une opération atomique faible de comparaison et d’échange effectue un échange si les valeurs comparées sont égales. Si les valeurs ne sont pas égales, l’opération n’est pas garantie d’effectuer un échange.
Les surcharges qui n’ont pas de seconde memory_order
utilisent un implicite Order2
basé sur la valeur de 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 prennent deux memory_order
paramètres, la valeur de Order2
ne doit pas être memory_order_release
ou memory_order_acq_rel
ne doit pas être plus forte que la valeur de Order1
.
atomic::exchange
Utilise une valeur spécifiée pour remplacer la valeur stockée de *this
.
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::exchange(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Order
memory_order
.
Valeur de retour
Valeur stockée de *this
avant l’échange.
Notes
Cette opération effectue une opération en lecture-modification-écriture à utiliser Value
pour remplacer la valeur stockée dans *this
, dans les contraintes de mémoire spécifiées par Order
.
atomic::fetch_add
Récupère la valeur stockée, *this
puis ajoute une valeur spécifiée à la valeur stockée.
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_add (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Order
memory_order
.
Valeur de retour
Objet Ty
qui contient la valeur stockée avant *this
l’ajout.
Notes
La fetch_add
méthode effectue une opération en lecture-modification-écriture pour ajouter Value
atomiquement à la valeur stockée dans *this
, et applique les contraintes de mémoire spécifiées par Order
.
atomic::fetch_and
Effectue un « and » au niveau du bit (&
) sur une valeur et une valeur existante qui est stockée dans *this
.
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_and (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Order
memory_order
.
Valeur de retour
Objet Ty
qui contient le résultat du bit « and » (&
).
Notes
La fetch_and
méthode effectue une opération en lecture-modification-écriture pour remplacer la valeur stockée par *this
un bit « and » (&
) et Value
la valeur actuelle stockée dans *this
, dans les contraintes de mémoire spécifiées par Order
.
atomic::fetch_or
Effectue un « or » au niveau du bit (|
) sur une valeur et une valeur existante qui est stockée dans *this
.
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_or (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Order
memory_order
.
Valeur de retour
Objet Ty
qui contient le résultat du bit « ou » (|
).
Notes
La fetch_or
méthode effectue une opération en lecture-modification-écriture pour remplacer la valeur stockée par *this
un bit « ou » (|
) et Value
la valeur actuelle stockée dans *this
, dans les contraintes de mémoire spécifiées par Order
.
atomic::fetch_sub
Soustrait une valeur spécifiée de la valeur stockée.
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_sub (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Order
memory_order
.
Valeur de retour
Objet Ty
qui contient le résultat de la soustraction.
Notes
La fetch_sub
méthode effectue une opération en lecture-modification-écriture pour soustraire Value
atomiquement la valeur stockée dans *this
, dans les contraintes de mémoire spécifiées par Order
.
atomic::fetch_xor
Exécute un bit « exclusif ou » (^
) sur une valeur et une valeur existante qui est stockée dans *this
.
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
Ty atomic<Ty>::fetch_xor (
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Valeur de type Ty
.
Order
memory_order
.
Valeur de retour
Objet Ty
qui contient le résultat du bit « exclusif ou » (^
).
Notes
La fetch_xor
méthode effectue une opération en lecture-modification-écriture pour remplacer la valeur stockée par *this
un bit « exclusif ou » (^
) et Value
la valeur actuelle stockée dans *this
, et applique les contraintes de mémoire spécifiées par Order
.
atomic::is_lock_free
Spécifie si atomic
les opérations sur *this
sont sans verrou.
bool is_lock_free() const volatile noexcept;
Valeur de retour
true
si atomic
les opérations sont libres de *this
verrouillage ; sinon, false
.
Notes
Un atomic
type est libre si aucune opération sur ce type n’utilise atomic
des verrous.
atomic::load
Récupère la valeur stockée dans *this
, dans les contraintes de mémoire spécifiées.
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const volatile noexcept;
Ty atomic::load(
memory_order Order = memory_order_seq_cst
) const noexcept;
Paramètres
Order
memory_order
. Order
ne doit pas être memory_order_release
ou memory_order_acq_rel
.
Valeur de retour
Valeur récupérée stockée dans *this
.
atomic::store
Stocke une valeur spécifiée.
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) volatile noexcept;
void atomic<Ty>::store(
Ty Value,
memory_order Order = memory_order_seq_cst
) noexcept;
Paramètres
Value
Objet Ty
.
Order
Contrainte memory_order
.
Notes
Cette fonction membre stocke Value
*this
atomiquement dans , dans les contraintes de mémoire spécifiées par Order
.
Voir aussi
<atomic>
Informations de référence sur les fichiers d’en-tête