atomic<T>::is_always_lock_freeがtrueであること効果memory_order_seq_cstのメモリオーダーにしたがって現在の値objectとexpectedをバイトレベルで等値比較を行い、trueである場合は現在の値objectをdesiredで置き換え、falseである場合はexpectedを現在の値で置き換える。atomic_compare_exchange_strong()はより強い命令であり、交換可能な場合はCAS操作が常に成功する。アーキテクチャによっては、この関数はatomic_compare_exchange_strong()と等価だが、PowerPCやARMなどLL/SC命令を提供するアーキテクチャの場合、この関数はハードウェアの“弱いLL/SC命令”にて実装されうる。通常、CAS操作は、CASが成功するまでループさせる。Failureが発生しなければループさせる必要が無くなるといった状況であれば、atomic_compare_exchange_strong()を使うことで効率良くCASを行うことができる。逆に言えば、そのような状況でないなら常にループでatomic_compare_exchange_weak()を利用すれば良い。下に提供されています。