#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
#include <sys/types.h>
void *my_func(){
printf("hello\n");
pthread_exit((void*)0);
}
int main(int argc, char *argv[]) {
#define PTHREAD_MAX 20
pthread_t array[PTHREAD_MAX];
int i,err;
for(i=0;i<PTHREAD_MAX;i++){
if((err=pthread_create(&array[i],NULL,&my_func,NULL))!=0){
printf("thread error %d\n", i);
exit(errno);
}
}
int tmp;
long long int s; // 用它就OK
//int s; // 用它就返回3:ESRCH
// 看来 pthread_join 还跟编译位有关
for(i=0;i<PTHREAD_MAX;i++){
// 这里 s 用来装 pthread_exit的退出值
tmp=pthread_join(array[i], (void *)&s);
printf("thread: %lu terminated, tmp: %d, s: %lld\n", array[i], tmp, s);
}
return 0;
}
用如下的方式也OK
void *ret;
for(i=0;i<PTHREAD_MAX;i++){
tmp=pthread_join(array[i],ret);
printf("thread: %lu terminated\n tmp: %d\n", array[i], tmp);
}
#define ESRCH 3 /* No such process */