<atomic>
Définit les classes et les classes de modèle à utiliser pour créer des types qui prennent en charge les opérations atomiques.
#include <atomic>
Notes
Notes
Dans le code qui est compilé à l'aide de /clr ou d'/clr:pure, cet en-tête est bloqué.
Une opération atomique deux propriétés de clé qui vous permettent de plusieurs threads d'utilisation à manipuler correctement un objet sans utiliser de verrous d'exclusion mutuelle (mutex).
Étant donné qu'une opération atomique est indivisible, la seconde opération atomique sur le même objet d'un thread distinct peut obtenir l'état de l'objet uniquement avant ou après la première opération atomique.
En fonction de son argument memory_order, une opération atomique établit l'ordre des conditions requises pour la visibilité des effets d'autres opérations atomiques dans le même thread. Par conséquent, il inhibe les optimisations du compilateur non conformes aux spécifications classantes.
Sur les plateformes, il n'est pas possible d'appliquer efficacement les opérations atomiques pour certains types sans utiliser de verrous d'mutex. Un type atomique est verrou-disponible si opération atomique sur cette utilisation de type n'est pas les verrous.
La classe atomic_flag contient un type atomique minimal contenant un indicateur de bool. Les opérations sont toujours verrou- disponibles.
La classe de modèle atomic<Ty> enregistre un objet de type d'argument Ty et fournit un accès atomique à cette valeur stockée. Vous pouvez l'instanciation en utilisant n'importe quel type qui peut être copié en utilisant memcpy et être testé l'égalité à l'aide de memcmp. En particulier, vous pouvez utiliser avec les types définis par l'utilisateur qui répondent à ces critères et, dans de nombreux cas, avec les types à virgule flottante.
Le modèle a également un ensemble de spécialisations pour les types intégraux et 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 primaire.
Spécialisations du pointeur
Les spécialisations partielles d'atomic<Ty *> s'appliquent à tous les types pointeurs. Ils offrent 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. Ils offrent les opérations supplémentaires qui ne sont pas disponibles via le modèle primaire.
Chaque type d'atomic<integral> une macro correspondante que vous pouvez utiliser dans if directive pour déterminer le moment de la compilation si les événements de ce type sont verrou- disponibles. Si la valeur de la macro est zéro, les opérations sur le type ne sont pas verrou- disponibles. Si la valeur est 1, les opérations peuvent être verrou- disponibles, ainsi qu'un contrôle d'exécution est requis. Si la valeur est 2, les opérations sont verrou- disponibles. Vous pouvez utiliser la fonction atomic_is_lock_free pour déterminer à l'exécution si des opérations sur le type verrou- sont disponibles.
Pour les types intégraux, un type atomique correspondant nommé qui gère un objet de ce type intégral. Chaque type d'atomic_integral a le même ensemble de fonctions membres que l'instanciation de correspondance d'atomic<Ty> et peut être transmis aux fonctions atomiques non élément de circuit l'un des.
Type de atomic_integral |
Type intégral |
macro d'atomic_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 les opérations atomiques sur une valeur stockée. |
|
Décrit un objet qui définit et désactive atomiquement un indicateur bool. |
Enums
Nom |
Description |
---|---|
Fournit des noms symboliques pour les opérations de synchronisation sur les 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 la sémantique d'_explicitcorrespondant, sauf qu'elles ont les arguments implicites d'memory_order d'memory_order_seq_cst.
Nom |
Description |
---|---|
Effectue une opération atomique de comparaison et d'échange. |
|
Effectue une opération atomique de comparaison et d'échange. |
|
Effectue une opération atomique faible de comparaison et d'échange . |
|
Effectue une opération atomique faible de comparaison et d'échange . |
|
Remplace la valeur stockée. |
|
Remplace la valeur stockée. |
|
Ajoute une valeur spécifiée en une valeur stockée existante. |
|
Ajoute une valeur spécifiée en une valeur stockée existante. |
|
Effectue and au niveau de le bit sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue and au niveau de le bit sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue or au niveau de le bit sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue or au niveau de le bit sur une valeur spécifiée et une valeur stockée existante. |
|
Soustrait la valeur spécifiée d'une valeur stockée existante. |
|
Soustrait la valeur spécifiée d'une valeur stockée existante. |
|
Effectue exclusive or au niveau de le bit sur une valeur spécifiée et une valeur stockée existante. |
|
Effectue exclusive or au niveau de le bit sur une valeur spécifiée et une valeur stockée existante. |
|
Définit l'indicateur dans un objet d'atomic_flag à false. |
|
Définit l'indicateur dans un objet d'atomic_flag à false. |
|
Définit l'indicateur dans un objet d'atomic_flag à true. |
|
Définit l'indicateur 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é sont verrou- disponibles. |
|
Récupère une valeur atomique. |
|
Récupère une valeur atomique. |
|
Agit comme une frontière de sécurité qui génère la mémoire organisation des conditions requises 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 une valeur atomique. |
|
Stocke une valeur atomique. |
|
Agit comme une frontière de sécurité qui génère la mémoire organisation des exigences en ce qui concerne les autres frontières de sécurité. |
|
Arrête une chaîne possible de dépendance. |
Voir aussi
Référence
Bibliothèque STL (Standard Template Library)