日期:2014-05-16  浏览次数:20677 次

Linux多线程菜鸟问题
我是一个初学者,写了一个简单的多线程小程序

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#define THREAD_NUMBER 10

static pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
int sum=0;

void *thread(void *arg)
{
int i=(*(int*)arg);
pthread_mutex_lock(&mutex);
sum=sum+i;
pthread_mutex_unlock(&mutex);
printf("thread printf:%d\n",sum);
exit(1);
}

int main()
{
pthread_t pt[THREAD_NUMBER];
int i;
int arg[THREAD_NUMBER];
// pthread_mutex_init(&mutex,NULL);
for(i=0;i<THREAD_NUMBER;i++)
{
arg[i]=i;
if(pthread_create(&pt[i],NULL,thread,(void *)&arg[i])!=0)
{ printf("pthread_create error\n");
exit(1);
}
}
for(i=0;i<THREAD_NUMBER;i++)
{
if(pthread_join(pt[i],NULL)!=0)
{
printf("pthread_join error\n");
exit(1);
}
}
printf("sum is %d\n",sum);
pthread_mutex_destroy(&mutex);
return 0;
}

上面是我的代码,但是最后运行以后只输出了thread printf:0就结束了,哪位高手给看看问题出在哪里啊

------解决方案--------------------
void *thread(void *arg)
{
int i=(*(int*)arg);
pthread_mutex_lock(&mutex);
sum=sum+i;
pthread_mutex_unlock(&mutex);
printf("thread printf:%d\n",sum);
//exit(1); //这句不要试试看
}

------解决方案--------------------
任何一个线程执行后,exit直接退出程序了,肯定后面没有了。 
如下应该可以了,你验证下
void *thread(void *arg)
{
int i=(*(int*)arg);
while(1)
{
pthread_mutex_lock(&mutex);
sum=sum+i;
pthread_mutex_unlock(&mutex);
printf("thread:%u printf:%d\n",pthread_self(), sum); //加个线程号,好看下。
}
//exit(1);
}