【发布时间】:2013-04-09 06:03:15
【问题描述】:
许多 C++11 CAS 操作(例如,atomic_compare_exchange_weak、atomic_compare_exchange_strong)采用两个指针和一个值,例如:
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
相比之下,微软、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
为什么 C++11 CAS 函数采用两个指针和一个值,而不是看起来更传统的一个指针和两个值?
【问题讨论】:
-
__sync_bool_...返回一个 bool。 -
@KerrekSB:我展示的签名是从英特尔手册中复制而来的。我假设 gcc 使用相同的签名。我现在发现它没有。
标签: c++ c++11 compare-and-swap