Varianti

std::atomic_exchange, std::atomic_exchange_explicit

Da cppreference.com.

<metanoindex/>

 
 
Atomic operazioni di biblioteca
Tipi
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)
Funzioni
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)
Bandiere Atomic
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)
Inizializzazione
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)
Memoria di ordinazione
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>
Elemento definito nell'header <atomic>
template< class T > T atomic_exchange( std::atomic<T>* obj, T desr );
(1) (dal C++11)
template< class T > T atomic_exchange( volatile std::atomic<T>* obj, T desr );
(2) (dal C++11)
template< class T > T atomic_exchange_explicit( std::atomic<T>* obj, T desr, std::memory_order order );
(3) (dal C++11)
template< class T > T atomic_exchange_explicit( volatile std::atomic<T>* obj, T desr, std::memory_order order );
(4) (dal C++11)

1-2)

Sostituisce atomico il valore puntato da obj con il valore di desr e restituisce il valore obj precedentemente detenuta, come per 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)

Sostituisce atomico il valore puntato da obj con il valore di desr e restituisce il valore obj precedentemente detenuta, come per 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.

Parametri

obj -
puntatore all'oggetto atomica da modificare
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 -
il valore da memorizzare nell'oggetto atomica
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 memoria di ordinazione per questa operazione: tutti i valori sono consentiti .
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.

Valore di ritorno

Il valore contenuto in precedenza dall'oggetto atomico puntato da 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.

Eccezioni

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

Esempio

Un mutex spinlock può essere implementato in spazio utente tramite un'operazione atomica scambio, simile a 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();
    }
}

Output:

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

Vedi anche

(C++11)
atomicamente sostituito il valore dell'oggetto atomico e ottiene il valore contenuto in precedenza
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.

(metodo pubblico) [modifica]
confronta atomicamente il valore dell'oggetto atomica con non-atomica argomento ed esegue lo scambio atomico se il carico uguale o atomico in caso contrario
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.

(funzione di modello) [modifica]
specializzata operazioni atomiche per 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.

(funzione di modello)
C documentation for atomic_exchange, atomic_exchange_explicit