close
Espaces de noms
Variantes

std::atomic_exchange, std::atomic_exchange_explicit

De cppreference.com

<metanoindex/>

 
 
Atomique opérations de la bibliothèque
Types
Original:
Types
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
atomic (C++11)
atomic_is_lock_free (C++11)
Fonctions
Original:
Functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
atomic_store
atomic_store_explicit
(C++11)
(C++11)
atomic_load
atomic_load_explicit
(C++11)
(C++11)
atomic_exchange
atomic_exchange_explicit
(C++11)
(C++11)
atomic_compare_exchange_weak
atomic_compare_exchange_weak_explicit
atomic_compare_exchange_strong
atomic_compare_exchange_strong_explicit
(C++11)
(C++11)
(C++11)
(C++11)
atomic_fetch_add
atomic_fetch_add_explicit
(C++11)
(C++11)
atomic_fetch_sub
atomic_fetch_sub_explicit
(C++11)
(C++11)
atomic_fetch_and
atomic_fetch_and_explicit
(C++11)
(C++11)
atomic_fetch_or
atomic_fetch_or_explicit
(C++11)
(C++11)
atomic_fetch_xor
atomic_fetch_xor_explicit
(C++11)
(C++11)
Drapeaux atomiques
Original:
Atomic flags
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
atomic_flag (C++11)
atomic_flag_test_and_set
atomic_flag_test_and_set_explicit
(C++11)
(C++11)
atomic_flag_clear
atomic_flag_clear_explicit
(C++11)
(C++11)
Initialisation
Original:
Initialization
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
atomic_init (C++11)
ATOMIC_VAR_INIT (C++11)
ATOMIC_FLAG_INIT (C++11)
Mémoire de la commande
Original:
Memory ordering
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
memory_order (C++11)
kill_dependency (C++11)
atomic_thread_fence (C++11)
atomic_signal_fence (C++11)
 
<tbody> </tbody>
Déclaré dans l'en-tête <atomic>
template< class T > T atomic_exchange( std::atomic<T>* obj, T desr );
(1) (depuis C++11)
template< class T > T atomic_exchange( volatile std::atomic<T>* obj, T desr );
(2) (depuis C++11)
template< class T > T atomic_exchange_explicit( std::atomic<T>* obj, T desr, std::memory_order order );
(3) (depuis C++11)
template< class T > T atomic_exchange_explicit( volatile std::atomic<T>* obj, T desr, std::memory_order order );
(4) (depuis C++11)

1-2)

Remplace atomiquement la valeur pointée par obj avec la valeur de desr et retourne la valeur obj lieu précédemment, comme par obj->exhange(desr)
Original:
Atomically replaces the value pointed to by obj with the value of desr and returns the value obj held previously, as if by obj->exhange(desr)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

3-4)

Remplace atomiquement la valeur pointée par obj avec la valeur de desr et retourne la valeur obj lieu précédemment, comme par obj->exhange(desr, order)
Original:
Atomically replaces the value pointed to by obj with the value of desr and returns the value obj held previously, as if by obj->exhange(desr, order)
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Paramètres

obj -
pointeur vers l'objet à modifier atomique
Original:
pointer to the atomic object to modify
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
desr -
la valeur à stocker dans l'objet atomique
Original:
the value to store in the atomic object
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
order -
sycnhronization la mémoire de commande pour cette opération: toutes les valeurs sont autorisées .
Original:
the memory sycnhronization ordering for this operation: all values are permitted.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Retourne la valeur

La valeur détenue précédemment par l'objet atomique pointée par obj
Original:
The value held previously by the atomic object pointed to by obj
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Exceptions

noexcept specification:  
<tbody> </tbody>
noexcept
   (depuis C++11)

Exemple

Un mutex spinlock peut être mis en œuvre en espace utilisateur en utilisant une opération d'échange atomique, semblable à atomic_flag_test_and_set
Original:
A spinlock mutex can be implemented in userspace using an atomic exchange operation, similar to atomic_flag_test_and_set
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

#include <thread>
#include <vector>
#include <iostream>
#include <atomic>

std::atomic<bool> lock = ATOMIC_VAR_INIT(false);

void f(int n)
{
    for(int cnt = 0; cnt < 100; ++cnt) {
        while(std::atomic_exchange_explicit(&lock, true, std::memory_order_acquire))
             ; // spin until acquired
        std::cout << "Output from thread " << n << '\n';
        std::atomic_store_explicit(&lock, false, std::memory_order_release);
    }
}
int main()
{
    std::vector<std::thread> v;
    for (int n = 0; n < 10; ++n) {
        v.emplace_back(f, n);
    }
    for (auto& t : v) {
        t.join();
    }
}

Résultat :

Output from thread 2
Output from thread 6
Output from thread 7
...<exactly 1000 lines>...

Voir aussi

(C++11)
atomiquement remplacé, la valeur de l'objet atomique et obtient la valeur détenue précédemment
Original:
atomically replaced the value of the atomic object and obtains the value held previously
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction membre publique de std::atomic) [edit]
compare atomiquement la valeur de l'objet atomique non atomique avec l'argument, et réalise un échange atomique égal ou si la charge atomique sinon
Original:
atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique) [edit]
se spécialise opérations atomiques pour std::shared_ptr
Original:
specializes atomic operations for std::shared_ptr
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(fonction générique)
C documentation for atomic_exchange, atomic_exchange_explicit