#include <stdatomic.h>
Le type memory_order est une énumération qui décrit les contraintes d'ordre mémoire demandées à certaines
opérations atomiques. Plus l'ordre est fort, plus le raisonnement est simple, mais plus le compilateur et le processeur
ont de contraintes.
| Constante | Description |
|---|---|
memory_order_relaxed |
Aucune contrainte de synchronisation, seulement l'atomicité de l'opération. |
memory_order_consume |
Charge avec dépendance de données. En pratique, les compilateurs la traitent souvent comme acquire. |
memory_order_acquire |
Empêche les lectures et écritures suivantes de passer avant l'opération de lecture. |
memory_order_release |
Empêche les lectures et écritures précédentes de passer après l'opération d'écriture. |
memory_order_acq_rel |
Combine les contraintes acquire et release. |
memory_order_seq_cst |
Ordre séquentiellement cohérent, le plus simple à raisonner et le plus contraignant. |
L'exemple suivant utilise un stockage en release et une lecture en acquire.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#include <stdatomic.h> #include <stdio.h> #include <stdlib.h> int main() { atomic_int value = 0; atomic_store_explicit( &value, 7, memory_order_release ); printf( "%d\n", atomic_load_explicit( &value, memory_order_acquire ) ); return EXIT_SUCCESS; } |
Cet exemple produit l'affichage suivant.
7
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 :