Namespaces
Variants

atomic_exchange, atomic_exchange_explicit

From cppreference.net
Défini dans l'en-tête <stdatomic.h>
C atomic_exchange ( volatile A * obj, C desired ) ;
(1) (depuis C11)
C atomic_exchange_explicit ( volatile A * obj, C desired, memory_order order ) ;
(2) (depuis C11)

Remplace atomiquement la valeur pointée par obj avec desired et retourne la valeur obj détenue précédemment. L'opération est une opération de lecture-modification-écriture. La première version ordonne les accès mémoire selon memory_order_seq_cst , la deuxième version ordonne les accès mémoire selon order .

Ceci est une fonction générique définie pour tous les types d'objets atomiques A . L'argument est un pointeur vers un type atomique volatile pour accepter les adresses d'objets atomiques à la fois non volatiles et volatiles (par exemple les E/S mappées en mémoire), et la sémantique volatile est préservée lors de l'application de cette opération aux objets atomiques volatiles. C est le type non atomique correspondant à A .

Il n'est pas spécifié si le nom d'une fonction générique est une macro ou un identifiant déclaré avec liaison externe. Si une définition de macro est supprimée pour accéder à une fonction réelle (par exemple mise entre parenthèses comme ( atomic_exchange ) ( ... ) ), ou si un programme définit un identifiant externe avec le nom d'une fonction générique, le comportement est indéfini.

Table des matières

Paramètres

obj - pointeur vers l'objet atomique à modifier
desired - valeur de remplacement de l'objet atomique
order - ordonnancement de synchronisation mémoire pour cette opération : toutes les valeurs sont autorisées

Valeur de retour

La valeur précédemment détenue par l'objet atomique pointé par obj .

Références

  • Norme C17 (ISO/CEI 9899:2018) :
  • 7.17.7.3 Les fonctions génériques atomic_exchange (p: 207)
  • Norme C11 (ISO/IEC 9899:2011) :
  • 7.17.7.3 Les fonctions génériques atomic_exchange (p: 283)

Voir aussi

échange une valeur avec un objet atomique si l'ancienne valeur correspond à celle attendue, sinon lit l'ancienne valeur
(fonction)
Documentation C++ pour atomic_exchange , atomic_exchange_explicit