Using std::atomic<T> for thread-safe accesses
In C++11 and later, the <atomic>
header contains the definition of class template std::atomic<T>
. There are two different ways you can think about std::atomic
: you can think of it as a class template just like std::vector
, with overloaded operators that just happen to implement thread-safe operations; or you can think of it as a magical built-in family of types whose names just happen to contain angle brackets. The latter way of thinking about it is actually pretty useful, because it suggests--correctly--that std::atomic
is partly built into the compiler, and so the compiler will usually generate optimal code for atomic operations. The latter also suggests a way in which atomic
is different from vector
: with std::vector<T>
, the T
can be pretty much anything you like. With std::atomic<T>
, the T
is can be anything you like, but in practice it is a bad idea to use any T
that doesn't belong to a small set of atomic-friendly...