许多C11 CAS操作(例如,atomic_compare_exchange_weak,atomic_compare_exchange_strong)取两个指针和一个值,即:
- bool atomic_compare_exchange(T* pointer,T* expected,// pseudodeclaration!
- T desired);
相比之下,来自Microsoft,gcc和Intel的CAS操作都采用一个指针和两个值:
- long InterlockedCompareExchange(long* pointer,long desired,// Microsoft
- long expected);
- int __sync_bool_compare_and_swap (T* pointer,T expected,// gcc and
- T desired); // Intel
为什么C11 CAS函数需要两个指针和一个值,而不是一个更常规的一个指针和两个值呢?