我是使用Pthreads庫的C中的線程的新手。我使用pthread_exit(...)
返回值,並在main
等待它在加入。事情是,我正在測試它,並用兩個線程,其中一個的結果是好的,但另一個是沒有意義的東西。作爲例子,兩個線程都必須返回32,其中一個是OK,但另一個返回-123456789。有人可以幫助我?從C中的線程返回一個值C
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);
}
那麼我應該返回什麼? – user3420326
@ user3420326,我已經添加了一些關於如何解決這個問題的選項。可能有其他人,但這應該是一個足夠好的開始。 – paxdiablo