(33)-5.3 线程控制-线程终止_第1页
(33)-5.3 线程控制-线程终止_第2页
(33)-5.3 线程控制-线程终止_第3页
(33)-5.3 线程控制-线程终止_第4页
(33)-5.3 线程控制-线程终止_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

线程控制-线程终止学习目标掌握linux系统线程终止的几种方式线程终止线程的退出方式有以下3种:1、线程体函数执行结束使用pthread_create创建的线程执行一个函数,如果该函数执行结束,则线程退出。这种方法类似于进程的main()函数返回。2、线程被另一个线程所取消。类似于一个进程被另一个进程调用kill()函数杀死。3、线程自行退出。类似于一个进程调用了exit()函数。线程终止第1种方法是最常见的方法,这是一种正常退出情况。第2、3种方法是线程异常退出的情况。线程终止Linux环境下使用pthread_exit()函数终止线程,其函数原型如下:#include<pthread.h>voidpthread_exit(void*rval_ptr);pthread_exit()函数的参数是一个指向任意类型的指针,该指针指向的区域存储退出信息,该信息类似于传递给新线程的参数,可以将多个信息组织成一个结构体。线程终止一个线程的结束信息可以有两种:一种是线程体函数返回的指针所指向的区域另一种就是pthread_exit()函数所指向的区域第1种方法可以取得线程体函数的返回值。第2种方法得到pthread_exit()函数所设置的退出信息。当一个线程结束运行后,其结束信息的地址被保存在内核中,其他的线程可以引用此线程的结束信息。线程终止Linux环境下使用pthread_join()函数访问指定线程的结束信息。函数原型如下:#include<pthread.h>intptbread_join(pthread_ttid,void**rval_ptr);线程终止Pthread_join的第一个参数表示需要取得结束信息的线程。如果该线程尚在运行中,那么pthread_join()函数会导致调用线程的阻塞,直到指定的线程结束执行为止,也就是指定线程发生上述3种线程退出方式中的一种。如果指定线程的线程ID和调用线程不属于同一进程,则pthread_join()函数出错返回。不同进程的线程之间的通信远不像属于同一进程的线程那样简单,事实上其通信方式类似于进程之间的通信方式。线程终止Pthread_join的第二个参数rval_ptr是一个指向任意类型指针的指针。由于pthread_join()函数负责从内核中得到指定线程结束信息的地址,这是一个指针,因为要在内核中改变它的值,所以该参数的类型为指针的指针。线程终止如果线程由于线程体函数返回或者调用pthread_exit()函数退出,则第二个参数*rval_ptr指向的是退出信息的首地址。如果线程由于被其他线程取消而退出,则rval_ptr被设置为PTHREAD_CANCELED。如果调用线程对指定线程的退出信息并不关心,则可以将rval_ptr参数设置为NULL。这时调用线程仅仅等待指定线程结束执行,而不获得线程退出信息。如果成功得到指定线程的退出信息,pthread_join()函数返回0,失败则返回错误号。实例如何配合使用pthread_exit()函数和pthread_join()函数该程序定义了3个线程体函数:第1个线程体函数返回1,第2个线程体函数返回3,第3个线程体函数返回NULL(即返回O)。main()函数中分别使用此3个线程体函数创建线程,之后分别调用pthread_join()函数得到其结束状态信息并且输出实例编译运行:Gccthread_exit.c-othread_exit-pthread注意:实例顺序创建了3个线程,这样做的结果是3个线程是串行的,这和线程的设计初衷是相悖的,线程产生的根本原因之一就是为了增加并发度。实例在实际编程中应该采用以下编程模式pth.read_create(...);pthread_create(...);pthre-ad_create(...);pthread_join(tidl,...);pthread_join(tid2,&res);pthrea_join(tidn,&res);线程退出的3种方式pthread_exit()和pthread_join()的用法。-14

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论