代码:pthrd_loop_join.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
int var = 100;
void *tfn(void *arg)
{
int i;
i = (int)arg;
sleep(i);
if(i==1){
var = 333;
printf("I'm %dth pthread, pthread_id = %lu\n var = %d\n", i, pthread_self(), var);
return (void*)var;
}
else if(i == 3){
var = 777;
printf("I'm %dth pthread, pthread_id = %lu\n var = %d\n", i, pthread_self(), var);
pthread_exit((void*)var);
}
else{
printf("I'm %dth pthread, pthread_id = %lu\n var = %d\n", i, pthread_self(), var);
pthread_exit((void*)var);
}
return NULL;
}
int main()
{
pthread_t tid[5];
int i;
int *ret[5];
//循环创建多个子线程
for(i=0;i<5;i++)
pthread_create(&tid[i],NULL,tfn,(void*)i);
//循环回收多个子线程
for(i=0;i<5;i++){
pthread_join(tid[i],(void**)&ret[i]); //ret[i]用于接收子线程的返回值
printf("--------%d 's ret = %d\n", i, (int)ret[i]);
}
printf("I'm main pthread tid = %lu\t var = %d\n", pthread_self(), var);
sleep(i);
return 0;
}
结果: