From C++ Concurrency in Action:
difference between std::atomic and std::atomic_flag is that std::atomic may not be lock-free; the implementation may have to acquire a mutex internally in order to ensure the atomicity of the operations
I wonder why. If atomic_flag is guaranteed to be lock-free, why isn't it guaranteed for atomic<bool>
as well?
Is this because of the member function compare_exchange_weak
? I know that some machines lack a single compare-and-exchange instruction, is that the reason?