C++11標準ライブラリのatomic操作関数compare_exchange_weakとcompare_exchange_strongについてメモ。 両関数ともに変数のatomicなCAS(compare-and-swap)操作を提供する。weak版とstrong版との動作仕様は、weak版では “交換可能な場合でもCAS操作失敗する可能性がある(spurious failure)”*1 が、strong版では “交換可能な場合は常にCAS操作が成功する” という点のみ異なる。当初はweak版のみが定義されていたが、強いCAS操作命令をもつハードウェア性能を生かすために、N2748にてstrong版が追加された。 利用指針は下記の通り。大抵のケースでは ループ構造+compare_exchange_weakでよい(はず)。 アルゴリズム上、CAS操作をループで括る必要があればcompar