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