I wasn't aware of the
std::atomic_flag is an atomic boolean type. Unlike all specializations of std::atomic, it is guaranteed to be lock-free. Unlike std::atomic, std::atomic_flag does not provide load or store operations.
std::atomic bool type
std::atomic bool type not guranteed to be lock-free?
std::atomic may be implemented using locks.
then it's not atomic or what?
std::atomic is atomic whether it has been implemented using locks, or without.
std::atomic_flag is guaranteed to be implemented without using locks.
So what's the difference b/w two
The primary difference besides the lock-free guarantee is:
std::atomic_flagdoes not provide load or store operations.
and when should I use which?
Usually, you will want to use
std::atomic<bool> when you need an atomic boolean variable.
std::atomic_flag is a low level structure that can be used to implement custom atomic structures.