std::atomic::compare_exchange_weak, std::atomic::compare_exchange_strong
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. |
<metanoindex/>
<tbody> </tbody>| definiert in Header <atomic>
|
||
bool compare_exchange_weak( T& expected, T desired, std::memory_order success, std::memory_order failure ); bool compare_exchange_weak( T& expected, T desired, std::memory_order success, std::memory_order failure ) volatile; |
(1) | (seit C++11) |
bool compare_exchange_weak( T& expected, T desired, std::memory_order order = std::memory_order_seq_cst ); bool compare_exchange_weak( T& expected, T desired, std::memory_order order = std::memory_order_seq_cst ) volatile; |
(2) | (seit C++11) |
bool compare_exchange_strong( T& expected, T desired, std::memory_order success, std::memory_order failure ); bool compare_exchange_strong( T& expected, T desired, std::memory_order success, std::memory_order failure ) volatile; |
(3) | (seit C++11) |
bool compare_exchange_strong( T& expected, T desired, std::memory_order order = std::memory_order_seq_cst ); bool compare_exchange_strong( T& expected, T desired, std::memory_order order = std::memory_order_seq_cst ) volatile; |
(4) | (seit C++11) |
Atomar vergleicht den Wert in
*this mit dem Wert, auf den durch expected gespeichert, und wenn diese gleich sind, ersetzt die früheren mit desired (durchführt Lese-Modifizieren-Schreib-Operation). Andernfalls lädt den aktuellen Wert in *this in *expected (führt im Leerlauf) gespeichert .Original:
Atomically compares the value stored in
*this with the value pointed to by expected, and if those are equal, replaces the former with desired (performs read-modify-write operation). Otherwise, loads the actual value stored in *this into *expected (performs load operation).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.
Die Speichermodule Modelle für die Lese-Modifizieren-Schreiben und Ladeoperationen sind
success und failure sind. In der (2) und (4) Versionen order angewendet sowohl Lese-Modifizier-Schreib-Operationen geladen werden und, ausgenommen std::memory_order_release und std::memory_order_relaxed sind für die Ladeoperation verwendet, wenn order == std::memory_order_acq_rel oder order == std::memory_order_release jeweils .Original:
The memory models for the read-modify-write and load operations are
success and failure respectively. In the (2) and (4) versions order is used for both read-modify-write and load operations, except that std::memory_order_release and std::memory_order_relaxed are used for the load operation if order == std::memory_order_acq_rel, or order == std::memory_order_release respectively.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.
Die schwachen Formen (1-2) der Funktionen dürfen spuriously scheitern, das ist, als ob
*this != *expected handeln, auch wenn sie gleich sind. Wenn ein Vergleichs-und Austausch in einer Schleife ist, wird die schwache Version eine bessere Leistung auf einigen Plattformen. Wenn ein schwacher Vergleichen und-Austausch würde eine Schleife und eine starke eins erfordern würde nicht, ist der Starke vorzuziehen .Original:
The weak forms (1-2) of the functions are allowed to fail spuriously, that is, act as if
*this != *expected even if they are equal. When a compare-and-exchange is in a loop, the weak version will yield better performance on some platforms. When a weak compare-and-exchange would require a loop and a strong one would not, the strong one is preferable.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.
Parameter
| expected | - | Zeiger auf den Wert soll im atomaren Objekt gefunden werden
Original: pointer to the value expected to be found 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. |
| desired | - | der Wert in der atomaren Objekt zu speichern, wenn es wie erwartet
Original: the value to store in the atomic object if it is as expected The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| success | - | der Speicher Synchronisation Bestellsystem für die Lese-Modifizieren-Schreib-Operation, wenn der Vergleich erfolgreich ist. Alle Werte sind zulässig .
Original: the memory synchronization ordering for the read-modify-write operation if the comparison succeeds. 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. |
| failure | - | der Speicher Synchronisation Bestellsystem für die Ladeoperation, wenn der Vergleich fehlschlägt. Kann nicht sein std::memory_order_release oder
std::memory_order_ack_rel und können nicht angeben, stärker Bestellung als successOriginal: the memory synchronization ordering for the load operation if the comparison fails. Cannot be std::memory_order_release or std::memory_order_ack_rel and cannot specify stronger ordering than successThe text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| order | - | der Speicher-Synchronisation Bestellung für beide Operationen
Original: the memory synchronization ordering for both operations The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Rückgabewert
true wenn die zugrunde liegende atomaren Wert geändert wurde, false sonst .Original:
true if the underlying atomic value was changed, false otherwise.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.
Ausnahmen
Beispiel
Veranschaulicht, wie compare_exchange_strong Entweder ändert sich der Wert des atomaren Variablen oder der Variablen zum Vergleich herangezogen .
Original:
Demonstrates how compare_exchange_strong either changes the value of the atomic variable or the variable used for comparison.
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 <atomic>
#include <iostream>
std::atomic<int> ai;
int tst_val= 4;
int new_val= 5;
bool exchanged= false;
void valsout()
{
std::cout << "ai= " << ai
<< " tst_val= " << tst_val
<< " new_val= " << new_val
<< " exchanged= " << std::boolalpha << exchanged
<< "\n";
}
int main()
{
ai= 3;
valsout();
// tst_val != ai ==> tst_val is modified
exchanged= ai.compare_exchange_strong( tst_val, new_val );
valsout();
// tst_val == ai ==> ai is modified
exchanged= ai.compare_exchange_strong( tst_val, new_val );
valsout();
return 0;
}
Output:
ai= 3 tst_val= 4 new_val= 5 exchanged= false
ai= 3 tst_val= 3 new_val= 5 exchanged= false
ai= 5 tst_val= 3 new_val= 5 exchanged= true
Siehe auch
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) | |