在多线程程序中,如果想对变量进行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) { int i = 0; for(; i < 10000; ++i) { atomic_add(&total, i); add(&init, i); } printf("total = %d/n"); } int main() { pthread_t t1, t2, t3; pthread_create(&t1, NULL, run, NULL); pthread_create(&t2, NULL, run, NULL); pthread_create(&t3, NULL, run, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); pthread_join(t3, NULL); }