【原创】《Linux高级程序设计》杨宗德著 - Linux多线程编程 - 线程退出与等待
线程退出
新创建的线程从执行用户定义的函数处开始执行,直到出现以下情况时退出:
- 调用pthread_exit函数退出。
- 调用pthread_cancel函数取消该线程。
- 创建线程的进程退出或者整个函数结束。
- 其中的一个线程执行了exec类函数执行新的进程。
等待线程
退出线程示例
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void *helloworld(char *argc);
int main(int argc,int argv[])
{
int error;
int *temptr;
pthread_t thread_id;
pthread_create(&thread_id,NULL,(void *)*helloworld,"helloworld");
printf("*p=%x,p=%x\n",*helloworld,helloworld);
if(error=pthread_join(thread_id,(void **)&temptr))
{
perror("pthread_join");
exit(EXIT_FAILURE);
}
printf("temp=%x,*temp=%c\n",temptr,*temptr);
*temptr='d';
printf("%c\n",*temptr);
free(temptr);
return 0;
}
void *helloworld(char *argc)
{
int *p;
p=(int *)malloc(10*sizeof(int));
printf("the message is %s\n",argc);
printf("the child id is %u\n",pthread_self());
memset(p,'c',10);
printf("p=%x\n",p);
pthread_exit(p);
//return 0;
}
运行结果:
$ ./pthread_exit_test
*p&