Wiele operacji C++ 11 CAS (np atomic_compare_exchange_weak
, atomic_compare_exchange_strong
) wziąć dwa wskaźniki i wartości, czyli tak:Dlaczego operacje C++ 11 CAS przyjmują dwa parametry wskaźnika?
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
Natomiast operacje CAS Microsoft, gcc i Intel wszystko wziąć jeden wskaźnik i dwie wartości:
long InterlockedCompareExchange(long* pointer, long desired, // Microsoft
long expected);
int __sync_bool_compare_and_swap (T* pointer, T expected, // gcc and
T desired); // Intel
Dlaczego C++ 11 funkcje CAS trwać dwa wskaźniki i wartości, zamiast tego, co wydaje się być bardziej konwencjonalny jeden wskaźnik i dwie wartości?
'__sync_bool _...' zwraca bool * *. –
@KerrekSB: Podpis, który pokazałem skopiowałem z podręcznika Intela. Zakładam, że gcc używał tego samego podpisu. Teraz widzę, że tak nie jest. – KnowItAllWannabe