1
我正在将一个程序移植到Windows环境中,该程序直接使用clang的语言扩展__c11_atomic_compare_exchange_strong
来执行某些CAS操作。什么是铿锵内建__c11_atomic_compare_exchange_strong等效于MSVC?
MSVC(2015,2017)中该函数的等效函数是什么?
我正在将一个程序移植到Windows环境中,该程序直接使用clang的语言扩展__c11_atomic_compare_exchange_strong
来执行某些CAS操作。什么是铿锵内建__c11_atomic_compare_exchange_strong等效于MSVC?
MSVC(2015,2017)中该函数的等效函数是什么?
正如@ 0xBADF00所建议的那样,希望用它们的C++11 std::atomic等价物替换这些呼叫。 MSVC有full support为std::atomic
,因为VS 2012
但是,如果由于某种原因你不想这样做(例如,你希望你的代码编译在VS 2010),在Visual C++的std::atomic_compare_exchange_strong
当量InterlockedCompareExchange
功能。请注意,这些函数不使用模板,因此可以使用不同大小的基元的变体,例如InterlockedCompareExchange64
。因此,它们不能用作直接替换,因为您将需要为正在使用的类型使用适当的版本。
为什么不使用独立于平台的std :: atomic,它具有compare_exchange_strong。见http://en.cppreference.com/w/cpp/atomic/atomic – 0xBADF00