我需要__sync_fetch_and_sub
自己用汇编语言编写原子操作的实现,它基于没有内置函数的 GCC 3.4 __sync_fetch_and_sub
。但我对组装知之甚少。
谁能帮我?任何帮助将不胜感激!!
这里是实现__sync_fetch_and_add
inline unsigned int __sync_fetch_and_add(volatile unsigned int* p, unsigned int incr)
{
unsigned int result;
__asm__ _volatile_ ("lock; xadd %0, %1" :
"=r"(result), "=m"(*p):
"0"(incr), "m"(*p) :
"memory");
return result;
}
__sync_fetch_and_add(int *ptr, int a_count)
就是将 a_count 原子地添加到 ptr 指向的变量中。返回之前在内存中的值。
__sync_fetch_and_sub(int *ptr, int a_count)
就是从ptr指向的变量中原子地减去a_count。返回之前在内存中的值。