Molti dei C++ 11 operazioni CAS (ad esempio, atomic_compare_exchange_weak
, atomic_compare_exchange_strong
) prendere due puntatori e un valore, vale a dire, in questo modo:Perché le operazioni CAS C++ 11 richiedono due parametri puntatore?
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
Al contrario, le operazioni di CAS da Microsoft, gcc, e Intel tutti prendono un puntatore e due valori:
long InterlockedCompareExchange(long* pointer, long desired, // Microsoft
long expected);
int __sync_bool_compare_and_swap (T* pointer, T expected, // gcc and
T desired); // Intel
Perché i C++ 11 funzioni CAS prendere due puntatori e un valore al posto di quello che sembra essere un puntatore più convenzionale e due valori?
'__sync_bool _...' restituisce un bool * *. –
@KerrekSB: la firma che ho mostrato è stata copiata dal manuale Intel. Supponevo che gcc usasse la stessa firma. Ora vedo che non è così. – KnowItAllWannabe