std::atomic_flag_test_and_set, std::atomic_flag_test_and_set_explicit - cppreference.com (original) (raw)
| Defined in header | ||
|---|---|---|
| bool atomic_flag_test_and_set( volatile std::atomic_flag* obj ) noexcept; | (1) | (since C++11) |
| bool atomic_flag_test_and_set( std::atomic_flag* obj ) noexcept; | (2) | (since C++11) |
| bool atomic_flag_test_and_set_explicit( volatile std::atomic_flag* obj, std::memory_order order ) noexcept; | (3) | (since C++11) |
| bool atomic_flag_test_and_set_explicit( std::atomic_flag* obj, std::memory_order order ) noexcept; | (4) | (since C++11) |
Atomically changes the state of a std::atomic_flag pointed to by obj to set (true) and returns the value it held before.
3,4) The memory synchronization order is order.
[edit] Parameters
| obj | - | pointer to std::atomic_flag to access |
|---|---|---|
| order | - | the memory synchronization order |
[edit] Return value
The value previously held by the flag pointed to by obj.
[edit] Notes
std::atomic_flag_test_and_set and std::atomic_flag_test_and_set_explicit can be implemented as obj->test_and_set() and obj->test_and_set(order) respectively.
[edit] Example
A spinlock mutex can be implemented in userspace using an std::atomic_flag.
Output:
Output from thread 2 Output from thread 6 Output from thread 7 ...<exactly 1000 lines>...