- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 线程;目录页;目录页;与进程不同,线程(Thread)是系统调度分派的最小单位,与进程相比,线程没有独立的地址空间,多个线程共享一段地址空间,因此线程消耗更少的内存资源,线程间通信也更为方便,有时线程也被称为轻量级进程(Light Weight Process,LWP)。;早期操作系统中并没有线程这一概念,无论是分配资源还是调度分派,都以进程为最小单位,随着计算机技术的发展,人们逐渐发现了进程作为系统调度分派单位时存在的一些弊端,人们意识到操作系统应能调度一个更小的单位,以减少消耗,提高效率,由此,线程应运而生。;Linux系统中的线程借助进程机制实现,线程与进程联系密切: 进程可以蜕变成线程,当在一个进程中创建一个线程时,原有的进程就会变成线程,两个线程共用一段地址空间; 线程又被称为轻量级进程,线程的TCB(Thread Control Block,线程控制块)与进程的PCB相同,因此也可以将TCB视为PCB; 对内核而言,线程与进程没有区别,cpu会为每个线程与进程分配时间片,并通过PCB来调度不同的线程和进程。;轻量级线程与内核及cpu之间的关系如图9-1所示。;一个进程的实体可分为线程集和资源集两大部分;一个线程的实体包括支持线程独立运行的资源和一部分私有数据。;使用多线程编程时,程序的并发性会得到一定提升。如图9-1,若系统中的进程是单线程进程,那么进程中的命令只能在一个处理器上顺序执行;而若一个进程细分为多个线程,一个进程中的多个线程可以同时在不同的cpu上运行,如此可在一定程度上减少程序的执行时间,提高程序的执行效率。 虽然线程与进程联系密切,有时线程还可以被称为轻量级进程(Lightweight Process,LWP),但它们仍是有区别的,其中最大的区别在于:线程PCB中指向内存资源的三级页表相同,而进程PCB中指向内存资源的三级页表不同。;多个线程的虚拟地址会被映射到物理磁盘的同一段地址空间。如图9-2所示,为线程间的地址映射关系。;线程的运行只需极少的资源,线程机制既有优点亦有缺点,但瑕不掩瑜,线程在Linux操作系统中仍得到了广泛地应用。;目录页;早期Linux系统中并没有线程这一概念,直到20世纪80年代,线程才被引入到Linux系统中,彼时Linux操作系统已经相当完善,于是Linux系统便借助创建线程的方法来创建进程,除此之外,线程的操作流程也与进程类似,分为:创建线程、挂起线程、终止线程以及其它相关操作。;Linux系统中创建线程的系统调用接口为pthread_create(),该函数存在于函数库pthread.h中,其声明如下: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);;Linux系统中创建线程的系统调用接口为pthread_create(),该函数存在于函数库pthread.h中,其声明如下: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);;;进程拥有独立的地址空间,当使用fork()函数创建出新进程后,若其中一个进程要对fork()之前的数据进行修改,进程中会依据“写时复制”原则,先复制一份该数据到子进程的地址空间,再修改数据,因此即便是全局变量,在进程间也是不共享的。;;线程机制中用于单个线程退出的函数为pthread_exit() ,该函数位于函数库pthread.h中,其声明如下: void pthread_exit(void *retval); pthread_exit()函数没有返回值,其参数retval表示线程的退出状态,通常设置为NULL。下面通过一个案例来展示pthread_exit()函数的用法。;;线程机制中用于终止线程的函数为pthread_cancel(),该函数对应线程机制中的kill()函数,pthread_cancel()函数可向指定线程发送信号CANCEL,使一个线程强行杀死另外一个线程。pthread_cancel()函数的声明如下: int pthread_cancel(pthread_t thread); pthread_cancel()中的参数thread为线程id,若函数调用成功则返回0,否则返回errno。使用pthread_cancel()函数终止的进程其退出值为PTHREAD_CAN
您可能关注的文档
最近下载
- 小学数学新青岛版三年级上册第五单元第1课时 整十、整百数乘一位数的口算教学课件(2025秋新版).pptx VIP
- 中医药技能大赛考试复习题及含答案.doc VIP
- 精益安全生产管理PPT.ppt VIP
- 3.5 曹冲称象的故事(课件)2025-2026学年度人教版数学三年级上册.pptx VIP
- 金风1.5MW风机机舱柜识别图.pdf VIP
- SN/T 1299-2003_入出境航空器器械除鼠操作规程.pdf VIP
- 《中考英语备考讲座》课件.ppt VIP
- Q NE-DA01.1-2020 《陆上风电、光伏建设项目质量验收范围划分》.xlsx VIP
- 智能电网中的电力市场机制研究.pptx
- 二年级数学上册《认识厘米》教案.docx VIP
文档评论(0)