I’m not an expert or anything, but here’s what I know:
std::atomic
simply says that callingload
andstore
(and a few other operations) concurrently is well-defined. An atomic operation is indivisible – nothing can happen ‘in-between’.- I assume
std::atomic
is based off ofboost::atomic
. If you can, usestd
, otherwise useboost
. - They are both portable, with the
std
being completely so, however your compiler will need to support C++11 - Likely
std::atomic_bool
. You should not need to use volatile.
Also, I believe load
/store
differs from operator=
/operator T
only .load
/store
are atomic
Nevermind. I checked the standard and it appears that the operators are defined in terms of load
/store
/etc, however they may return different things.
Further reading:
- http://en.cppreference.com/w/cpp/atomic/atomic
- C++11 Standard
- C++ Concurrency in Action