std::atomic_exchange, std::atomic_exchange_explicit
Aus cppreference.com
![]() | This page has been machine-translated from the English version of the wiki using Google Translate. The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
definiert in Header <atomic> | ||
template<class T > T atomic_exchange(std::atomic<T>* obj, T desr ); | (1) | (seit C++11) |
template<class T > T atomic_exchange(volatilestd::atomic<T>* obj, T desr ); | (2) | (seit C++11) |
template<class T > T atomic_exchange_explicit(std::atomic<T>* obj, T desr, | (3) | (seit C++11) |
template<class T > T atomic_exchange_explicit(volatilestd::atomic<T>* obj, T desr, | (4) | (seit C++11) |
Atomar ersetzt den Wert, auf den
3-4) obj
mit dem Wert der desr
und gibt den Wert obj
statt zuvor, als ob durch 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.
Atomar ersetzt den Wert, auf den
obj
mit dem Wert der desr
und gibt den Wert obj
statt zuvor, als ob durch 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.
Inhaltsverzeichnis |
[Bearbeiten]Parameter
obj | - | Zeiger auf den atomaren Objekts zu ändern 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 | - | der Wert auf im atomaren Objekt zu speichern 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 | - | der Speicher sycnhronization Bestellung für diesen Vorgang: Alle Werte sind zulässig . 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. |
[Bearbeiten]Rückgabewert
Die zuvor von der atomaren Objekt gehalten, auf die
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.
[Bearbeiten]Ausnahmen
[Bearbeiten]Beispiel
Ein Spinlock Mutex kann im Userspace mit einem atomaren Austausch Betrieb, ähnlich atomic_flag_test_and_set umgesetzt werden
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 acquiredstd::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>...
[Bearbeiten]Siehe auch
(C++11) | atomar ersetzt den Wert des atomaren Objekt und erhält den Wert zuvor gehaltenen 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. (öffentliche Elementfunktion of std::atomic ) |
atomar vergleicht den Wert des atomaren Objekt mit nicht-elementare Argument und führt atomaren Austausch wenn gleiche oder atomare Last, wenn nicht 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. (Funktions-Template) | |
spezialisiert atomare Operationen für 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. (Funktions-Template) | |
C documentation for atomic_exchange, atomic_exchange_explicit |