C++ 11のCAS操作(例えば、atomic_compare_exchange_weak
、atomic_compare_exchange_strong
)の多くは、このような二つのポインタと値、すなわち、取りますすべて1つのポインタと2つの値を取る:なぜC++ 11 CASオペレーションは2つのポインタパラメータを取るのですか?これとは対照的に</p> <pre><code>bool atomic_compare_exchange(T* pointer, T* expected, // pseudodeclaration! T desired); </code></pre> <p>、CAS操作マイクロソフト、GCC、およびインテルから:
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機能は、二つのポインタ、代わりに、より従来のポインタ2つの値と思われるものの値を取るのですか?
'__sync_boolは_...' * BOOL *返します。 –
@KerrekSB:私がインテルのマニュアルをコピーしたことを示した署名。私はgccが同じ署名を使用していると仮定しました。私は今それがそうでないことを見る。 – KnowItAllWannabe