title: What exactly is std::atomic?
body: <p>I understand that <code>std::atomic&lt;&gt;</code> is an atomic object. But atomic to what extent? To my understanding an operation can be atomic. What exactly is meant by making an object atomic? For example if there are two threads concurrently executing the following code:</p>
  
  <pre><code>a = a + 12;
  </code></pre>
  
  <p>Then is the entire operation (say <code>add_twelve_to(int)</code>) atomic? Or are changes made to the variable atomic (so <code>operator=()</code>)? </p>