Bibliothèque C ++ - <atomique>
introduction
Ce sont des types qui encapsulent une valeur dont l'accès est garanti pour ne pas provoquer de courses de données et peuvent être utilisés pour synchroniser les accès à la mémoire entre différents threads et la bibliothèque atomique fournit des composants pour des opérations atomiques à grain fin permettant une programmation simultanée sans verrouillage. Chaque opération atomique est indivisible par rapport à toute autre opération atomique qui implique le même objet.
Type atomique
N ° Sr. | Types de membres et définition |
---|---|
1 | atomique Modèle de classe atomique et spécialisations pour les types booléens, intégraux et pointeurs |
Types atomiques de style C
Les types atomiques suivants sont également définis dans cet en-tête.
atomique pour les types intégraux fondamentaux .
Ce sont soit des typedefs de la spécialisation complète correspondante du atomique modèle de classe ou une classe de base d'une telle spécialisation.
atomiques pour les intégrales basées sur la largeur (celles définies dans<cinttypes>).
Chacun de ceux-ci est soit un alias de l'un des atomes ci-dessus pour les types intégraux fondamentaux, soit une spécialisation complète duatomiquemodèle de classe avec un type intégral étendu .
Où N est un sur 8, 16, 32, 64 ou tout autre type de largeur pris en charge par la bibliothèque.
type contenu | type atomique | la description |
---|---|---|
bool |
atomic_bool | |
char |
atomic_char | |
signed char |
atomic_schar | |
unsigned char |
atomic_uchar | |
short |
atomic_short | |
unsigned short |
atomic_ushort | |
int |
atomic_int | |
unsigned int |
atomic_uint | |
long |
atomic_long | |
unsigned long |
atomic_ulong | |
long long |
atomic_llong | |
unsigned long long |
atomic_ullong | |
wchar_t |
atomic_wchar_t | |
char16_t |
atomic_char16_t | |
char32_t |
atomic_char32_t | |
intmax_t | atomic_intmax_t | |
uintmax_t | atomic_uintmax_t | |
int_least N_t |
atomic_int_least N_t |
|
uint_least N_t |
atomic_uint_least N_t |
|
int_fast N_t |
atomic_int_fast N_t |
|
uint_fast N_t |
atomic_uint_fast N_t |
|
intptr_t | atomic_intptr_t | |
uintptr_t | atomic_uintptr_t | |
size_t | atomic_size_t | |
ptrdiff_t | atomic_ptrdiff_t |
Opérations sur les types atomiques
&N ° Sr. | Opérations et définition |
---|---|
1 | atomic_is_lock_free Il est utilisé pour vérifier si les opérations du type atomique sont sans verrouillage |
2 | atomic_store & atomic_store_explicit Il remplace automatiquement la valeur de l'objet atomique par un argument non atomique |
3 | atomic_load & atomic_load_explicit Il obtient de manière atomique la valeur stockée dans un objet atomique |
4 | atomic_exchange & atomic_exchange_explicit Il remplace atomiquement la valeur de l'objet atomique par un argument non atomique et renvoie l'ancienne valeur de l'atome |
5 | atomic_compare_exchange_weak & atomic_compare_exchange_weak_explicit & atomic_compare_exchange_strong & atomic_compare_exchange_strong_explicit Il compare atomiquement la valeur de l'objet atomique avec un argument non atomique et effectue un échange atomique si la charge est égale ou atomique sinon |
6 | atomic_fetch_add & atomic_fetch_add_explicit Il ajoute une valeur non atomique à un objet atomique et obtient la valeur précédente de l'atome |
sept | atomic_fetch_sub & atomic_fetch_sub_explicit Il soustrait une valeur non atomique d'un objet atomique et obtient la valeur précédente de l'atome |
8 | atomic_fetch_and & atomic_fetch_and_explicit Il remplace l'objet atomique par le résultat de ET logique par un argument non atomique et obtient la valeur précédente de l'atome |
9 | atomic_fetch_or & atomic_fetch_or_explicit Il remplace l'objet atomique par le résultat du OU logique par un argument non atomique et obtient la valeur précédente de l'atome |
dix | atomic_fetch_xor & atomic_fetch_xor_explicit Il remplace l'objet atomique par le résultat de XOR logique par un argument non atomique et obtient la valeur précédente de l'atome |
Type de drapeau et opérations
N ° Sr. | Type de drapeau et définition |
---|---|
1 | drapeau_atomique Le type atomique booléen sans verrouillage |
2 | atomic_flag_test_and_set & atomic_flag_test_and_set_explicit Il définit atomiquement l'indicateur sur true et renvoie sa valeur précédente |
3 | atomic_flag_clear & atomic_flag_clear_explicit Il définit atomiquement la valeur de l'indicateur sur false |