【发布时间】:2014-04-24 03:31:56
【问题描述】:
我是 C 中使用 Pthreads 库的线程的新手。我使用pthread_exit(...) 返回值,并在main 在连接处等待它。问题是,我正在测试它并且使用两个线程,其中一个的结果是好的,但另一个是没有意义的东西。例如,两个线程都必须返回 32,其中一个正常,但另一个返回 -123456789。有人可以帮帮我吗?
void *contar(void *arg){ //funcion thread
int i,j=0;
int *aux = (int *) arg;
int id = *aux;
int strip = N/T;
int inicio = id*strip ;
int fin = inicio + strip;
printf("%d %d %d \n",id,inicio,fin);
for(i=inicio;i<fin;i++){
if(VEC[i] == X){
j++;
}
}
pthread_exit(&j);
}
int main(int argc,char* argv[]){
int i,j,k;
void *res;
int *aux;
int acum=0;
N = (argc > 1)? atoi(argv[1]):n;
T = (argc > 2)? atoi(argv[2]):t;
X = (argc > 3)? atoi(argv[3]):x;
//Aloca memoria para el vetor
VEC =(int*)malloc(sizeof(int)*N);
aux=(int*)malloc(sizeof(int)*T);
//Aloca memoria para threads
threads=(pthread_t*) malloc(T*sizeof(pthread_t));
//Inicializa el vector VEC
for(i=0;i<N;i++){
VEC[i]=1;
}
pthread_attr_t attr;
pthread_attr_init (&attr);
for(i=0;i<T;i++){
aux[i]=i;
pthread_create(&(threads[i]),&attr,contar,&(aux[i]));
}
for(i=0;i<T;i++){
pthread_join((threads[i]),&res);
printf("%d \n",*(int *)res);
}
free(VEC);
free(threads);
free(aux);
free(res);
return(0);
}
【问题讨论】: