std::atomic_exchange, std::atomic_exchange_explicit
Da cppreference.com.
![]() |
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.
La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
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, |
(3) | (dal C++11) |
template< class T > T atomic_exchange_explicit( volatile std::atomic<T>* obj, T desr, |
(4) | (dal C++11) |
Sostituisce atomico il valore puntato da
3-4) 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.
You can help to correct and verify the translation. Click here for instructions.
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.
You can help to correct and verify the translation. Click here for instructions.
Indice |
[modifica] 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. |
[modifica] 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.
You can help to correct and verify the translation. Click here for instructions.
[modifica] Eccezioni
[modifica] 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.
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>...
[modifica] 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) |
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) | |
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
|