許多C++ 11 CAS操作(例如,atomic_compare_exchange_weak
,atomic_compare_exchange_strong
)取兩個指針和值,即,像這樣的:爲什麼C++ 11 CAS操作需要兩個指針參數?
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
相比之下,微軟,GCC和英特爾的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 _...'返回一個布爾* *。 –
@KerrekSB:我展示的簽名是從英特爾手冊中複製而來的。我認爲gcc使用了相同的簽名。我現在看到它沒有。 – KnowItAllWannabe