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 .

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_leastN_t atomic_int_leastN_t
uint_leastN_t atomic_uint_leastN_t
int_fastN_t atomic_int_fastN_t
uint_fastN_t atomic_uint_fastN_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