All atomic types defined by the standard library can be found in the <atomic> header library. The system guarantees the atomicity to these types and all the related operations with these types. Some operations may not be atomic, but the system creates the illusion of atomicity in such cases. The standard atomic types use a member function, is_lock_free(), that allows the user to determine whether operations on a given type are done directly with atomic instructions (is_lock_free() returns true) or done using internal locks by the compiler and library (is_lock_free() returns false).
std::atomic_flag is different among all atomic types. The operations on this type are required to be atomic as per the standard. Hence, this doesn't ...