对两个长整数进行加操作,并将结果作为返回值返回。
需要重新实现汇编代码段。
在x86架构下:
static inline long atomic64_add_and_return(long i, atomic64_t *v) { long i = i; asm_volatile_( "lock ; " "xaddq %0, %1;" : "=r"(i) : "m"(v->counter), "0"(i)); return i + __i; } static inline void prefetch(void *x) { asm volatile("prefetcht0 %0" ::"m"(*(unsigned long *)x)); }
在鲲鹏平台下,使用GCC内置函数实现:
static __inline__ long atomic64_add_and_return(long i, atomic64_t *v) { return __sync_add_and_fetch(&((v)->counter), i); }