C++11 CAS 操作の多く (例: , atomic_compare_exchange_weak
)atomic_compare_exchange_strong
は、次のように 2 つのポインターと 1 つの値を取ります。
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
対照的に、Microsoft、gcc、Intel の CAS 操作はすべて、1 つのポインターと 2 つの値を取ります。
long InterlockedCompareExchange(long* pointer, long desired, // Microsoft
long expected);
int __sync_bool_compare_and_swap (T* pointer, T expected, // gcc and
T desired); // Intel
C++11 の CAS 関数は、従来の 1 つのポインターと 2 つの値のように見えるものではなく、2 つのポインターと 1 つの値を取るのはなぜですか?