*void pthread_exit(void retval);:单个线程推出
对比:exit() :进程退出
区别以下三者:
(1) exit():整个进程退出;
(2)pthread_exit():当前线程退出;
(3) return : 返回调用者那里去;
**int pthread_join(pthread_t thread, void retval): 阻塞等待线程退出
对比: wait阻塞等待子进程退出
单个线程的退出
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<string.h>
typedef struct{
char c;
int a;
char * ch[64];
}exit_t;
void *pthread_fun(void *arg)
{
exit_t * retval = (exit_t *)arg;
retval->c='m';
retval->a=10;
strcpy(retval->ch,"hello world\n");
pthread_exit((void *)10);
}
int main()
{
pthread_t tid;
int ret;
exit_t * retval;
ret = pthread_create(&tid,NULL,pthread_fun,(void *)retval);
if(ret != 0)
{
printf("ptthread_cretea error");
exit(1);
}
sleep(1);
printf("c=%c a = %d ch=%s\n",retval->c,retval->a,retval->ch);
int *pv;
pthread_join(tid,(void **)&pv );
printf("pv=%d\n",(int)pv);
return 0;
}
回收多个线程
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>
#include<string.h>
void *pthread_fun(void *arg)
{
int i= (int) arg;
sleep(i);
printf("%dth tid=%d\n",i+1,pthread_self());
pthread_exit((void *)i);
}
int main()
{
pthread_t tid[5];
int ret,i;
for(i = 0; i<5; ++i)
{
ret = pthread_create(&tid[i],NULL,pthread_fun,(void *)i);
if(ret != 0)
{
printf("ptthread_cretea error");
exit(1);
}
}
for(i = 0; i<5; ++i)
{
int * retval;
pthread_join(tid[i],(void **)&retval);
printf("%dth finish\n ",(int)retval);
}
sleep(i);
return 0;
}