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é

Type memory_order (C11)

Entête à inclure

#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.

Exemple de code

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;
}
Utilisation de memory_order

Cet exemple produit l'affichage suivant.

7

Sujets connexes

La librairie <stdatomic.h>
atomic_load_explicit
atomic_store_explicit


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