<atomic>

Définit des classes et des classes de modèle à utiliser pour créer des types qui prennent en charge les opérations atomiques.

#include <atomic>

Notes

[!REMARQUE]

Dans le code compilé à l'aide de /clr ou d' /clr:pure, cet en-tête est bloqué.

Une opération atomique a deux propriétés de clé qui vous aident à plusieurs threads d'utilisation à manipuler correctement un objet sans utiliser de verrous du mutex.

  • Étant donné qu'une opération atomique est indivisible, une deuxième opération atomique sur le même objet d'un thread différent peut obtenir l'état de l'objet qu'avant ou après la première opération atomique.

  • En fonction de son argument de memory_order , une opération atomique génère le classement des spécifications pour la visibilité des effets d'autres opérations atomiques dans le même thread.Par conséquent, elle inhibe les optimisations du compilateur qui violent les spécifications classantes.

Sur certaines plateformes, il peut s'avérer impossible d'implémenter efficacement des opérations atomiques pour certains types sans utiliser de verrous d' mutex .Un type atomique est sans verrou qu'opération atomique sur ce type ne utilisation de verrous pas.

La classe atomic_flag fournit un type atomique minimal qui contient une balise d' bool .Les opérations sont toujours sans verrou libres.

La classe de modèle atomic<Ty> enregistre un objet de son type d'argument Ty et fournit l'accès atomique que valeur signalée.Vous pouvez l'instancier à l'aide de n'importe quel type qui peut être copié à l'aide de memcpy et être testé d'égalité à l'aide de memcmp.En particulier, vous pouvez l'utiliser avec les types définis par l'utilisateur qui répondent à ces exigences et, dans de nombreux cas, avec les types à virgule flottante.

Le modèle a également un jeu de spécialisations pour les types intégraux et d'une spécialisation partielle pour les pointeurs.Ces spécialisations fournissent des opérations supplémentaires qui ne sont pas disponibles via le modèle principal.

Spécialisations de pointeur

Les spécialisations partielles d' atomic<Ty *> s'appliquent à tous les types pointeur.Elles fournissent des méthodes pour les opérations arithmétiques sur les pointeurs.

Spécialisations intégrales

Les spécialisations d' atomic<integral> s'appliquent à tous les types intégraux.Elles fournissent des opérations supplémentaires qui ne sont pas disponibles via le modèle principal.

Chaque type d' atomic<integral> a une macro correspondante que vous pouvez utiliser dans if directive pour déterminer au moment de la compilation si les opérations sur ce type sont sans verrou libres.Si la valeur de la macro est zéro, les opérations sur le type ne sont pas sans verrou libres.Si la valeur est 1, les opérations peuvent être sans verrou libres, et un contrôle d'exécution est requis.Si la valeur est 2, les opérations sont sans verrou libres.Vous pouvez utiliser la fonction atomic_is_lock_free pour déterminer au moment de l'exécution si les opérations sur le type sans verrou sont libres.

Pour les types intégraux, un type atomique nommé correspondant qui gère un objet de ce type intégral.Chaque type d' atomic_integral a le même jeu de fonctions membres que l'instanciation correspondante d' atomic<Ty> et peut être passé aux fonctions atomiques non - membre l'un des.

Type de atomic_integral

Type intégral

Macro deatomic_is_lock_free

atomic_char

char

ATOMIC_CHAR_LOCK_FREE

atomic_schar

signed char

ATOMIC_CHAR_LOCK_FREE

atomic_uchar

unsigned char

ATOMIC_CHAR_LOCK_FREE

atomic_char16_t

char16_t

ATOMIC_CHAR16_T_LOCK_FREE

atomic_char32_t

char32_t

ATOMIC_CHAR32_T_LOCK_FREE

atomic_wchar_t

wchar_t

ATOMIC_WCHAR_T_LOCK_FREE

atomic_short

short

ATOMIC_SHORT_LOCK_FREE

atomic_ushort

unsigned short

ATOMIC_SHORT_LOCK_FREE

atomic_int

int

ATOMIC_INT_LOCK_FREE

atomic_uint

unsigned int

ATOMIC_INT_LOCK_FREE

atomic_long

long

ATOMIC_LONG_LOCK_FREE

atomic_ulong

unsigned long

ATOMIC_LONG_LOCK_FREE

atomic_llong

long long

ATOMIC_LLONG_LOCK_FREE

atomic_ullong

unsigned long long

ATOMIC_LLONG_LOCK_FREE

Les noms de typedef existent pour les spécialisations du modèle atomique pour certains types définis dans l'en-tête <inttypes.h>.

Type atomique

Nom de typedef

atomic_int8_t

atomic<int8_t>

atomic_uint8_t

atomic<uint8_t>

atomic_int16_t

atomic<int16_t>

atomic_uint16_t

atomic<uint16_t>

atomic_int32_t

atomic<int32_t>

atomic_uint32_t

atomic<uint32_t>

atomic_int64_t

atomic<int64_t>

atomic_uint64_t

atomic<uint64_t>

atomic_int_least8_t

atomic<int_least8_t>

atomic_uint_least8_t

atomic<uint_least8_t>

atomic_int_least16_t

atomic<int_least16_t>

atomic_uint_least16_t

atomic<uint_least16_t>

atomic_int_least32_t

atomic<int_least32_t>

atomic_uint_least32_t

atomic<uint_least32_t>

atomic_int_least64_t

atomic<int_least64_t>

atomic_uint_least64_t

atomic<uint_least64_t>

atomic_int_fast8_t

atomic<int_fast8_t>

atomic_uint_fast8_t

atomic<uint_fast8_t>

atomic_int_fast16_t

atomic<int_fast16_t>

atomic_uint_fast16_

atomic<uint_fast16_t>

atomic_int_fast32_t

atomic<int_fast32_t>

atomic_uint_fast32_t

atomic<uint_fast32_t>

atomic_int_fast64_t

atomic<int_fast64_t>

atomic_uint_fast64_t

atomic<uint_fast64_t>

atomic_intptr_t

atomic<intptr_t>

atomic_uintptr_t

atomic<uintptr_t>

atomic_size_t

atomic<size_t>

atomic_ptrdiff_t

atomic<ptrdiff_t>

atomic_intmax_t

atomic<intmax_t>

atomic_uintmax_t

atomic<uintmax_t>

Structures

Nom

Description

structure atomique

Décrit un objet qui effectue des opérations atomiques sur une valeur signalée.

structure d'atomic_flag

Décrit un objet qu'atomique définit et efface une balise d' bool .

Enums

Nom

Description

enum du memory_order

Fournit des noms symboliques pour les opérations de synchronisation dans des emplacements de mémoire.Ces opérations affectent la façon dont les assignations dans un thread sont visibles dans un autre.

Fonctions

Dans la liste suivante, les fonctions qui ne se terminent pas dans _explicit ont une sémantique d' _explicitcorrespondant, mais qu'elles ont des arguments implicites de memory_order d' memory_order_seq_cst.

Nom

Description

fonction d'atomic_compare_exchange_strong

Effectue une comparaison atomique et échangent l'exécution.

fonction atomic_compare_exchange_strong_explicit

Effectue une comparaison atomique et échangent l'exécution.

fonction d'atomic_compare_exchange_weak

Effectue un atomique faible comparent et échangent l'exécution.

fonction atomic_compare_exchange_weak_explicit

Effectue un atomique faible comparent et échangent l'exécution.

atomic_exchange, fonction

Remplace une valeur signalée.

fonction atomic_exchange_explicit

Remplace une valeur signalée.

atomic_fetch_add, fonction

Ajoute une valeur spécifiée à une valeur stockée existante.

fonction atomic_fetch_add_explicit

Ajoute une valeur spécifiée à une valeur stockée existante.

atomic_fetch_and, fonction

Effectue une opération de bits and sur une valeur spécifiée et une valeur stockée existante.

fonction atomic_fetch_and_explicit

Effectue une opération de bits and sur une valeur spécifiée et une valeur stockée existante.

atomic_fetch_or, fonction

Effectue une opération de bits or sur une valeur spécifiée et une valeur stockée existante.

fonction atomic_fetch_or_explicit

Effectue une opération de bits or sur une valeur spécifiée et une valeur stockée existante.

atomic_fetch_sub, fonction

Soustrait une valeur spécifiée d'une valeur stockée existante.

fonction atomic_fetch_sub_explicit

Soustrait une valeur spécifiée d'une valeur stockée existante.

atomic_fetch_xor, fonction

Effectue une opération de bits exclusive or sur une valeur spécifiée et une valeur stockée existante.

fonction atomic_fetch_xor_explicit

Effectue une opération de bits exclusive or sur une valeur spécifiée et une valeur stockée existante.

fonction atomic_flag_clear

Définit la balise dans un objet d' atomic_flag à false.

fonction atomic_flag_clear_explicit

Définit la balise dans un objet d' atomic_flag à false.

fonction d'atomic_flag_test_and_set

Définit la balise dans un objet d' atomic_flag à true.

fonction atomic_flag_test_and_set_explicit

Définit la balise dans un objet d' atomic_flag à true.

fonction d'atomic_init

Définit la valeur stockée dans un objet d' atomic .

Fonction atomic_is_lock_free

Spécifie si les opérations atomiques sur un objet spécifié sans verrou sont libres.

fonction d'atomic_load

Récupère atomique une valeur.

fonction atomic_load_explicit

Récupère atomique une valeur.

fonction d'atomic_signal_fence

Agit comme une frontière de sécurité qui génère la mémoire classement des spécifications entre les frontières de sécurité dans un thread appelant qui a des gestionnaires de signal exécutés dans le même thread.

fonction d'atomic_store

Stocke atomique une valeur.

fonction atomic_store_explicit

Stocke atomique une valeur.

fonction d'atomic_thread_fence

Agit comme une frontière de sécurité qui génère la mémoire classement des spécifications par rapport à d'autres frontières de sécurité.

fonction de kill_dependency

Casse une chaîne possible de dépendance.

Voir aussi

Référence

Modèles Standard

Autres ressources

Fichiers d'en-tête