Nhiều người trong số các C++ 11 hoạt động CAS (ví dụ, atomic_compare_exchange_weak
, atomic_compare_exchange_strong
) mất hai con trỏ và một giá trị, ví dụ như thế này:Tại sao hoạt động của C++ 11 CAS lại có hai tham số con trỏ?
bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration!
T desired);
Ngược lại, các hoạt động CAS từ Microsoft, gcc, và Intel tất cả lấy một con trỏ và hai giá trị:
long InterlockedCompareExchange(long* pointer, long desired, // Microsoft
long expected);
int __sync_bool_compare_and_swap (T* pointer, T expected, // gcc and
T desired); // Intel
Tại sao hàm C++ 11 CAS có hai con trỏ và một giá trị thay vì một con trỏ và hai giá trị thông thường hơn?
'__sync_bool _...' trả về một * bool *. –
@KerrekSB: Chữ ký tôi cho thấy tôi đã sao chép từ hướng dẫn sử dụng của Intel. Tôi giả định rằng gcc sử dụng cùng một chữ ký. Bây giờ tôi thấy rằng nó không. – KnowItAllWannabe