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>
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.
#include <stdatomic.h>
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; } |
Cet exemple produit l'affichage suivant.
2
| 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 |
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 :