title: compare and exchange on x86 cpu
body: <p>On a intel i3, i5, i7 x86 64 bits cpu, for instance, is it true that CAS only guarantee atomic on max. 8 bytes object size? </p>
  
  <p>on x86 cpu, lock instruction is add to CAS operation, eg. <code>CMPXCHG</code>, which means the the whole cache line is locked for the reading cpu, so  <code>std::atomic::compare_exchange_weak()</code> will not return fault for spurious failure reason?</p>
  
  <p>If x86 cpu use <code>lock</code> at CAS operation, what is the performance gain if use lock free programming instead of use std::mutex on share resource? </p>
  
  <p>If i want to write a lock free linked-list for example. I do atomic load on the header node's pointer  and compare it with  <code>std::atomic::compare_exchange_weak()</code> to see any changes has been made. In this case, does ABA problem apply on x86 cpu?</p>