hg_git hg_git - 1 month ago 5x
C++ Question

difference between standard's atomic bool and atomic flag

I wasn't aware of the

variables but was aware about the
(weird right!) provided by the standard; however one thing caught my eye: there are two seemingly-same(to me) atomic types provided by the standard, listed below:

  1. std::atomic<bool>

  2. std::atomic_flag

Also it is mentioned with the example of
std::atomic_flag type

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.

which I fail to understand. Is
std::atomic bool type
not guaranteed to be lock-free? Then it's not atomic or what?

So what's the difference between the two and when should I use which?


std::atomic bool type not guranteed to be lock-free?

Correct. 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_flag does 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.