Многие из операций CAS 11 CAS (например, atomic_compare_exchange_weak
, atomic_compare_exchange_strong
) принимают два указателя и значение, то есть следующее:
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
В отличие от операций CAS от Microsoft, gcc и Intel все берут один указатель и два значения:
long InterlockedCompareExchange(long* pointer, long desired, // Microsoft
long expected);
int __sync_bool_compare_and_swap (T* pointer, T expected, // gcc and
T desired); // Intel
Почему С++ 11 CAS-функции принимают два указателя и значение вместо того, что кажется более обычным одним указателем и двумя значениями?