2个线程同时改变一个全局变量counter的时候,需要加一个锁。
#include
#include
using namespace std;
#define NLOOP 5000
int counter=0;
pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
void *doit(void *);
int main(int argc,char **argv)
{
pthread_t tidA,tidB;
pthread_create(&tidA,NULL,&doit,NULL);
pthread_create(&tidB,NULL,&doit,NULL);
pthread_join(tidA,NULL);//join函数是main线程要等待tidA和tidB的线程结束后再退出
pthread_join(tidB,NULL);
exit(0);
}
void * doit(void *vptr){
int i,val;
for(i=0;i
pthread_mutex_lock(&counter_mutex);//这里需要把counter的操作都锁起来,否则在2个线程切换的时候会出错。
val = counter;
cout << pthread_self()<
cout << val+1 << endl;
counter = val +1;
pthread_mutex_unlock(&counter_mutex);
}
return (NULL);
}