std::atomic_flag::test_and_set
From cppreference.com
                    
                                        
                    < cpp | atomic | atomic flag
                    
                                                            
                    | Defined in header  <atomic> | ||
| bool test_and_set(std::memory_order order = std::memory_order_seq_cst) volatile; | (1) | (since C++11) | 
| bool test_and_set(std::memory_order order = std::memory_order_seq_cst); | (2) | (since C++11) | 
Atomically changes the state of a std::atomic_flag to set (true) and returns the value it held before.
[edit] Parameters
| order | - | the memory sycnhronization ordering for this operation | 
[edit] Exceptions
[edit] See also
| atomically sets flag to false (public member function) | |
| 
(C++11) (C++11) | atomically sets the flag to true and returns its previous value (function) | 
| (C++11) | defines memory ordering constraints for the given atomic operation (typedef) |