Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

La librairie <stdatomic.h> (C11)

La librairie stdarg.h Les types atomiques


Accès rapide :
Présentation de l'entête <stdatomic.h>
Entête à inclure
Exemple d'utilisation
Eléments fournis par la librairie <stdatomic.h>

Présentation de l'entête <stdatomic.h>

La librairie <stdatomic.h>, introduite avec C11, fournit les opérations atomiques du langage C. Ces opérations permettent de partager des données entre plusieurs threads sans provoquer de data race, à condition de respecter les règles d'ordre mémoire.

POSIX reprend cet entête en s'alignant sur le standard C ISO. Il n'ajoute donc pas d'élément propre à <stdatomic.h>. Une implémentation peut néanmoins définir la macro __STDC_NO_ATOMICS__ : dans ce cas, l'entête et les fonctionnalités atomiques ne sont pas disponibles.

Entête à inclure

#include <stdatomic.h>

Exemple d'utilisation

L'exemple suivant incrémente un compteur atomique et lit sa valeur finale.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
#include <stdatomic.h>
#include <stdio.h>
#include <stdlib.h>

int main() {

    atomic_int counter = 0;

    atomic_fetch_add( &counter, 1 );
    atomic_fetch_add( &counter, 1 );

    printf( "%d\n", atomic_load( &counter ) );
    return EXIT_SUCCESS;
}
Utilisation simple de stdatomic.h

Cet exemple produit l'affichage suivant.

2

Eléments fournis par la librairie <stdatomic.h>

Nom Type Description Depuis
__STDC_VERSION_STDATOMIC_H__ macro Version de l'entête stdatomic.h. C23
atomic_flag type Drapeau atomique garanti lock-free. C11
memory_order type Enumération décrivant les contraintes d'ordre mémoire. C11
atomic_* types Alias de types atomiques prédéfinis. C11/C23
ATOMIC_*_LOCK_FREE macros Indiquent les garanties lock-free des familles de types. C11
ATOMIC_FLAG_INIT, ATOMIC_VAR_INIT macros Initialisation de drapeaux et d'objets atomiques. C11
kill_dependency macro Casse une chaîne de dépendance pour memory_order_consume. C11
atomic_compare_exchange_strong fonction générique La fonction générique atomic_compare_exchange_strong compare atomiquement la valeur stockée avec une valeur attendue, puis tente de la remplacer si elle correspond. C11
atomic_compare_exchange_strong_explicit fonction générique La fonction générique atomic_compare_exchange_strong_explicit compare atomiquement la valeur stockée avec une valeur attendue, puis tente de la remplacer si elle correspond. C11
atomic_compare_exchange_weak fonction générique La fonction générique atomic_compare_exchange_weak compare atomiquement la valeur stockée avec une valeur attendue, puis tente de la remplacer si elle correspond. C11
atomic_compare_exchange_weak_explicit fonction générique La fonction générique atomic_compare_exchange_weak_explicit compare atomiquement la valeur stockée avec une valeur attendue, puis tente de la remplacer si elle correspond. C11
atomic_exchange fonction générique La fonction générique atomic_exchange remplace atomiquement une valeur et retourne l'ancienne. C11
atomic_exchange_explicit fonction générique La fonction générique atomic_exchange_explicit échange une valeur en précisant l'ordre mémoire. C11
atomic_fetch_add fonction générique La fonction générique atomic_fetch_add applique atomiquement une opération de addition et retourne l'ancienne valeur. C11
atomic_fetch_add_explicit fonction générique La fonction générique atomic_fetch_add_explicit applique atomiquement une opération de addition et retourne l'ancienne valeur. C11
atomic_fetch_and fonction générique La fonction générique atomic_fetch_and applique atomiquement une opération de ET bit à bit et retourne l'ancienne valeur. C11
atomic_fetch_and_explicit fonction générique La fonction générique atomic_fetch_and_explicit applique atomiquement une opération de ET bit à bit et retourne l'ancienne valeur. C11
atomic_fetch_or fonction générique La fonction générique atomic_fetch_or applique atomiquement une opération de OU bit à bit et retourne l'ancienne valeur. C11
atomic_fetch_or_explicit fonction générique La fonction générique atomic_fetch_or_explicit applique atomiquement une opération de OU bit à bit et retourne l'ancienne valeur. C11
atomic_fetch_sub fonction générique La fonction générique atomic_fetch_sub applique atomiquement une opération de soustraction et retourne l'ancienne valeur. C11
atomic_fetch_sub_explicit fonction générique La fonction générique atomic_fetch_sub_explicit applique atomiquement une opération de soustraction et retourne l'ancienne valeur. C11
atomic_fetch_xor fonction générique La fonction générique atomic_fetch_xor applique atomiquement une opération de OU exclusif bit à bit et retourne l'ancienne valeur. C11
atomic_fetch_xor_explicit fonction générique La fonction générique atomic_fetch_xor_explicit applique atomiquement une opération de OU exclusif bit à bit et retourne l'ancienne valeur. C11
atomic_flag_clear fonction générique La fonction atomic_flag_clear replace le drapeau atomique à l'état clair. C11
atomic_flag_clear_explicit fonction générique La fonction atomic_flag_clear_explicit replace le drapeau atomique à l'état clair en précisant l'ordre mémoire. C11
atomic_flag_test_and_set fonction générique La fonction atomic_flag_test_and_set place le drapeau atomique à l'état positionné et retourne son ancien état. C11
atomic_flag_test_and_set_explicit fonction générique La fonction atomic_flag_test_and_set_explicit place le drapeau atomique à l'état positionné en précisant l'ordre mémoire et retourne son ancien état. C11
atomic_init fonction générique La fonction générique atomic_init initialise un objet atomique avec une valeur donnée. C11
atomic_is_lock_free fonction générique La fonction générique atomic_is_lock_free indique si les opérations sur un objet atomique donné sont lock-free. C11
atomic_load fonction générique La fonction générique atomic_load lit atomiquement la valeur courante d'un objet. C11
atomic_load_explicit fonction générique La fonction générique atomic_load_explicit lit atomiquement une valeur en précisant l'ordre mémoire souhaité. C11
atomic_signal_fence fonction générique La fonction atomic_signal_fence insère une barrière entre le flot d'exécution courant et un gestionnaire de signal exécuté dans le même thread. C11
atomic_store fonction générique La fonction générique atomic_store remplace atomiquement la valeur stockée dans un objet. C11
atomic_store_explicit fonction générique La fonction générique atomic_store_explicit stocke une valeur en précisant l'ordre mémoire souhaité. C11
atomic_thread_fence fonction générique La fonction atomic_thread_fence insère une barrière mémoire entre threads, sans accéder directement à un objet atomique particulier. C11
kill_dependency macro La macro kill_dependency casse une chaîne de dépendance pour les lectures réalisées avec memory_order_consume. C11


La librairie stdarg.h Les types atomiques




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé