在多线程程序中,如果想对变量进行add操作,可以用锁来实现,也可以通过下面的汇编代码实现
#include <stdio.h>
#include <pthread.h>
int total = 0;
//原子操作
int atomic_add(volatile int * mem, int val)
{
asm volatile("lock; xaddl %0, %1"
: "=r" (val), "=m" (*mem)
: "0" (val), "m" (*mem)
: "memory", "cc");
return val;
}
//非原子操作
int add(int *mem, int val)
{
*mem += val;
return val;
}
void * run(void *arg)
{
......
阅读全文