[原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(二)
来源:互联网 发布:ubuntu挂起命令 编辑:程序博客网 时间:2024/05/16 01:04
本文可任意转载,但必须注明作者和出处。
--Linux下多线程编程详解
接下来,再看另两个重要的函数pthread_exit和pthread_join
函数原型如下:
线程的终止可以是调用了pthread_exit或者该线程的例程结束。也就是说,一个线程可以隐式的退出,也可以显式的调用pthread_exit函数来退出。
pthread_exit函数唯一的参数value_ptr是函数的返回代码,只要pthread_join中的第二个参数value_ptr不是NULL,这个值将被传递给value_ptr。
函数原型如下:
函数pthread_join的作用是,等待一个线程终止。
调用pthread_join的线程将被挂起直到参数thread所代表的线程终止时为止。pthread_join是一个线程阻塞函数,调用它的函数将一直等到被等待的线程结束为止。
如果value_ptr不为NULL,那么线程thread的返回值存储在该指针指向的位置。该返回值可以是由pthread_exit给出的值,或者该线程被取消而返回PTHREAD_CANCELED。
当一个非分离的线程终止后,该线程的内存资源(线程描述符和栈)并不会被释放,直到有线程对它使用了pthread_join时才被释放。因此,必须对每个创建为非分离的线程调用一次pthread_join调用,以避免内存泄漏。否则当线程是可分离的,调用pthread_exit,将终止该调用线程,并释放所有资源,没有线程等待它终止。
至多只能有一个线程等待给定的线程终止。如果已经有一个线程在等待thread线程终止了,那么再次调用pthread_join等待同一线程的线程将返回一个错误。
#include <stdio.h>
#include <pthread.h>
void * pthread_func_test(void * arg);
int main()
{
pthread_t pt1,pt2;
pthread_create(&pt1,NULL,pthread_func_test,"This is the Thread_ONE");
pthread_create(&pt2,NULL,pthread_func_test,"This is the Thread_TWO");
pthread_join(pt1,NULL);
pthread_join(pt2,NULL); //这行不写,会发生什么?或写成pthread_join(pt1,NULL);又会怎么样?
}
void * pthread_func_test(void * arg)
{
printf("%s ",arg);
pthread_exit(NULL); //显式声明
}
到此为止,我们就学习了三个重要的函数--create、exit、join,下一篇,继续讲解多线程编程中的线程互斥问题。
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(二)
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
- 【原创】手把手教你Linux下的多线程设计--Linux下多线程编程详解(三)
- 【原创】手把手教你Linux下的多线程设计--Linux下多线程编程详解(四)
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)
- 手把手教你Linux下的多线程设计
- Linux下多线程编程详解
- Linux下多线程编程详解
- Linux下多线程编程详解
- Linux下多线程编程详解
- Linux下多线程编程详解 .
- Linux下多线程编程详解
- 【Linux】Linux下多线程编程详解
- Linux下的多线程编程
- Linux下的多线程编程
- Linux下的多线程编程
- Linux下的多线程编程
- Linux下的多线程编程
- Asp.net 数据采集基类(远程抓取,分解,保存,匹配)
- Ehcache
- 一个mvc的例子
- 在Ubuntu中新建root帐号
- fei心目中的Java2十大经典中文图书
- [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(二)
- C#编码标准指导和最佳实践 之 编码实践
- ffmpeg 使用方法
- Squid+MRTG实现完善的缓存代理和http服务加速代理
- 图情刊物投稿
- 微软员工BLOG集
- C#编码标准指导和最佳实践 之 项目设置和项目结构
- JSP和JSF双剑合并 打造完美Web应用
- 海明码