我在StackOverflow的一个回答中找到了这段关于compareAndSwap
的代码:
boolean CompareAndSwapPointer(volatile * void * ptr,
void * new_value,
void * old_value) {
#if defined(_MSC_VER)
if (InterlockedCompareExchange(ptr, new_value, old_value) == old_value) return false;
else return true;
#elif (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) > 40100
return __sync_bool_compare_and_swap(ptr, old_value, new_value);
#else
# error No implementation
#endif
}
这是除了内联汇编外,最合适的具有便携式快速代码的方法吗?
此外,一个问题在于不同编译器中那些特定的builtin
方法具有不同的参数和返回值,这可能需要进行一些额外的更改,例如在此示例中使用if then else
。
另一个问题是这些builtin
方法在机器代码层面上的行为,它们是否完全相同?(例如,是否使用相同的汇编指令)
注意:如果有许多支持的平台而不仅仅是(Windows
和Linux
)如本例所示,则另一个问题将是代码可能会变得非常庞大。
std::atomic<T*>
:-) - Kerrek SB