以下代码为n和v都产生随机值,这并不奇怪,n是没有被正确保护的随机值.但是假设v应该终于为0.我的代码有什么问题吗?还是有人可以为我解释一下吗?谢谢.
我正在开发x86架构的4核服务器. uname如下.
Linux 2.6.9-22.ELsmp#1 SMP Mon Sep 19 18:00:54 EDT 2005 x86_64 x86_64 x86_64 GNU / Linux
#include <stdio.h> #include <pthread.h> #include <asm-x86_64/atomic.h> int n = 0; atomic_t v; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; #define LOOP 10000 void* foo(void *p) { int i = 0; for(i = 0; i < LOOP; i++) { // pthread_mutex_lock(&mutex); ++n; --n; atomic_inc(&v); atomic_dec(&v); // pthread_mutex_unlock(&mutex); } return NULL; } #define COUNT 50 int main(int argc,char **argv) { int i; pthread_t pids[COUNT]; pthread_attr_t attr; pthread_attr_init(&attr); atomic_set(&v,0); for(i = 0; i < COUNT; i++) { pthread_create(&pids[i],&attr,foo,NULL); } for(i = 0; i < COUNT; i++) { pthread_join(pids[i],NULL); } printf("%d\n",n); printf("%d\n",v); return 0; }