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>...

[edit] See also