std::atomic::compare_exchange_weak, std::atomic::compare_exchange_strong
From cppreference.com
Defined in header <atomic>
|
||
bool compare_exchange_weak(T & expected, T desired, memory_order success, memory_order failure) volatile; |
(1) | (since C++11) |
bool compare_exchange_weak(T & expected, T desired, memory_order success, memory_order failure); |
(2) | (since C++11) |
bool compare_exchange_weak(T & expected, T desired, memory_order order = memory_order_seq_cst) volatile; |
(3) | (since C++11) |
bool compare_exchange_weak(T & expected, T desired, memory_order order = memory_order_seq_cst); |
(4) | (since C++11) |
bool compare_exchange_strong(T & expected, T desired, memory_order success, memory_order failure) volatile; |
(5) | (since C++11) |
bool compare_exchange_strong(T & expected, T desired, memory_order success, memory_order failure); |
(6) | (since C++11) |
bool compare_exchange_strong(T & expected, T desired, memory_order order = memory_order_seq_cst) volatile; |
(7) | (since C++11) |
bool compare_exchange_strong(T & expected, T desired, memory_order order = memory_order_seq_cst); |
(8) | (since C++11) |
This section is incomplete |
Contents |
[edit] Parameters
This section is incomplete |
[edit] Return value
Boolean indicating, if the underlying atomic variable was changed.
[edit] Complexity
This section is incomplete |
[edit] Example
Demonstrates how compare_exchange_strong either changes the value of the atomic variable or the variable used for comparison.
#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
[edit] See also
atomically compares the value of the atomic object with non-atomic argument and performs atomic exchange if equal or atomic load if not (function template) |