处理步骤
x86实现样例:
inline int nBasicAtomicInt::fetchAndStoreOrdered(int newValue)
{
/* 原子操作, 把_value的值和newValue交换, 且返回_value原来的值
*/
asm volatile("xchgl %0,%1"
: "=r" (newValue), "+m" (m_value)
: "0" (newValue)
: "memory");
return newValue;
}
鲲鹏上可替换成:
inline int nBasicAtomicInt::fetchAndStoreOrdered(int newValue)
{
/* 原子操作, 把_value的值和newValue
* 交换, 且返回_value原来的值
*/
return __atomic_exchange_n(&_q_value, newValue, __ATOMIC_SEQ_CST);
}