<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 |
---|---|
Décrit un objet qui effectue des opérations atomiques sur une valeur signalée. |
|
Décrit un objet qu'atomique définit et efface une balise d' bool . |
Enums
Nom |
Description |
---|---|
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 |
---|---|
Effectue une comparaison atomique et échangent l'exécution. |
|
Effectue une comparaison atomique et échangent l'exécution. |
|
Effectue un atomique faible comparent et échangent l'exécution. |
|
Effectue un atomique faible comparent et échangent l'exécution. |
|
Remplace une valeur signalée. |
|
Remplace une valeur signalée. |
|
Ajoute une valeur spécifiée à une valeur stockée existante. |
|
Ajoute une valeur spécifiée à une valeur stockée existante. |
|
Effectue une opération de bits and sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue une opération de bits and sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue une opération de bits or sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue une opération de bits or sur une valeur spécifiée et une valeur stockée existante. |
|
Soustrait une valeur spécifiée d'une valeur stockée existante. |
|
Soustrait une valeur spécifiée d'une valeur stockée existante. |
|
Effectue une opération de bits exclusive or sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue une opération de bits exclusive or sur une valeur spécifiée et une valeur stockée existante. |
|
Définit la balise dans un objet d' atomic_flag à false. |
|
Définit la balise dans un objet d' atomic_flag à false. |
|
Définit la balise dans un objet d' atomic_flag à true. |
|
Définit la balise dans un objet d' atomic_flag à true. |
|
Définit la valeur stockée dans un objet d' atomic . |
|
Spécifie si les opérations atomiques sur un objet spécifié sans verrou sont libres. |
|
Récupère atomique une valeur. |
|
Récupère atomique une valeur. |
|
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. |
|
Stocke atomique une valeur. |
|
Stocke atomique une valeur. |
|
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é. |
|
Casse une chaîne possible de dépendance. |