




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
4.7进程通信,进程通信是指进程之间可直接以较高的效率传递较多数据的信息交换方式。Linux进程间通信(Inte-ProcessCommunication,IPC)可分为控制信息的通信(低级通信)和大批数据信息的通信(高级通信)。低级通信主要用于进程间的同步、互斥、终止、挂起等控制信息的传递,所传递的信息往往只是一个信号、一个键或组合键。高级通信主要用于进程间数据块的交换和共享。用于实现低级通信的有软中断信号、信号量集。实现高级通信的有管道、消息队列、共享内存等。,2020/4/27,2,4.8线程,(一)问题的提出进程的引入使操作系统得以完成对并发执行的多道程序动态特征的描述和资源共享的管理,因而进程既是调度的基本单位又是资源分配的基本单位。进程所具有的这两个特点构成了程序并发执行的基础,但同时又导致进程切换过程中由于进程映像过大而带来的时空开销。因此,如果系统中创建的进程过多,或进程切换的频率过高,则会使系统效率下降,限制了并发度的进一步提高。进程切换所带来的庞大开销是因为进程与资源分配有关,操作系统如何降低进程切换所需要的时空开销呢?比如野战军作战略转移时,所有辎重都要随身携带,速度自然很慢。但是当部队要抢占山头时所采取的办法是卸下辎重,只带轻武器以急行军方式跑步前进,速度自然就会快很多。那么,操作系统是否也可以将调度的基本单位改成一种只用于调度执行而不涉及资源分配的单位?这个单位就是“线程”。减小进程上下文切换开销及更好地支持SMP(对称多处理),2020/4/27,3,(二)线程及其特征线程是调度执行的基本单位;线程不是资源分配的基本单位;线程从属于某个进程,是该进程的某个执行路线。因此,也将进程称为重型进程,线程称为轻型进程。线程是进程中的一个相对独立的可执行单元。一个进程中至少包含一个线程。由于同一进程内的线程之间涉及资源共享,所以需要同步机制来实现进程内多线程之间的通信。与进程类似,线程还可以创建其它线程,线程也有生命周期,也有状态的变化。,2020/4/27,4,(三)线程与进程的主要区别与联系,调度与资源分配在引入线程的操作系统中,线程是调度和指派的基本单位,而进程是资源的拥有单位。在同一进程中,线程的切换不会引起进程的切换;而在不同的进程中进行线程的切换,比如从一个进程中的线程切换到另一个进程中的线程时,将会引起进程的切换。线程不拥有资源,但可以访问它所在的进程的资源,从而获得系统资源。并发性引入线程的操作系统具有更好的并发性。系统开销进程切换时有很大的时空开销,而线程切换时只需要保存和设置少量的寄存器内容,时空开销很小。另外,由于同一进程内的多个线程共享进程的同一地址空间,因此,多个线程之间的同步与通信也非常容易实现,甚至不需要操作系统内核的干预。在一个进程内使用多线程的优点主要在于创建线程的工作量要比创建进程的工作量小不涉及资源分配,不同线程之间的切换比进程之间的切换要快。,2020/4/27,5,(四)线程的状态与线程控制块,与进程类似,线程也是一个动态的概念,也有一个从创建到消亡的过程,它也具有以下几个基本状态:新建态就绪态:具备执行条件,等待调度。运行态:正占有CPU处于运行中。阻塞态:等待某个事件发生。结束态:线程结束执行,释放其寄存器上下文和堆栈的内容。线程使用线程控制块TCB(ThreadCotrolBlock)来描述。线程由与其相关的堆栈、寄存器和线程控制块TCB组成。寄存器可以用来存储线程内的局部变量,但是不能存储其它线程的局部变量。线程的控制原语包括线程创建、线程终止、线程阻塞等等。,2020/4/27,6,(五)线程的分类,1用户级线程用户级线程ULT(User-LevelThread)由用户程序创建,并由用户程序对其进行调度和管理。操作系统内核并不知道有用户级线程的存在,因而用户级线程与内核无关。我们也称之为“纯ULT方法”。MS-DOS、Unix属于这种方法。其优点在于:应用程序中的线程转换开销比内核级的开销要小得多。(开销小)线程的调度算法与操作系统的调度算法无关。(算法灵活)用户级线程方法可以适用于任何操作系统,因为它与内核无关。(高适应性)其缺点在于:当进程中某线程执行一个系统调用而被阻塞时,会导致本进程的其它线程也阻塞。在纯ULT方式下,多线程不便利用多处理器,因为每次只有一个进程的一个线程在一个CPU上运行。,2020/4/27,7,2内核级线程内核级线程KLT(Kernel-LevelThread)中,所有线程的创建、调度、管理都由操作系统内核负责。一个用户进程可以按多线程方式编写程序,当它被提交给多线程操作系统运行时,内核为它创建一个进程和一个线程,线程在运行中还可以创建新的线程。我们称之为“纯KLT方法”。WindowsNT属于此类。其优点在于:内核可以调度一个进程中的多个线程,使其同时在多个处理器上并发运行,从而提高运行的速度和效率。当进程中的一个线程被阻塞时,该进程中的其它线程仍可运行。内核本身也可以用线程的方式实现。其缺点在于:同一进程中的线程切换要有两次态的转换(用户态内核态用户态),因为线程的调度运行在内核态,而应用程序运行在用户态。,2020/4/27,8,(六)线程举例,1Linux线程系统调用创建线程格式:intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg)参数说明:thread返回创建的线程标识符ID,是个指向线程标识符的指针;attr设置线程的属性,如果使用NULL则表示为系统默认属性;start_routine线程执行函数的地址,该函数必须具有void*返回值;arg线程执行函数的参数,如果不带参数则可以使用NULL。返回值:成功返回0出错则返回错误码注:该系统调用调用clone函数来创建线程。由于线程没有自己的存储空间,所以,它所执行的函数需要在创建它的进程中加以定义。,2020/4/27,9,1Linux线程系统调用,线程终止格式:intpthread_exit(void*retval)参数说明:retval传递给创建它的父线程的终止信息。功能:终止一个线程。返回值:成功返回0出错则返回错误码,2020/4/27,10,1Linux线程系统调用,等待线程终止格式:intpthread_join(pthread_tth,void*thread_return)参数说明:th被等待的线程标识符,*thread_return用户定义的指针,它可以用来存储被等待线程的终止信息。类似于wait(int*stat_addr,0)中的*stat_addr。如果不需要取终止信息则可使用NULL。功能:回收终止的线程,类似于回收进程waitpid()。调用它的函数将一直等待到被等待的线程结束为止。当函数返回时,被等待线程的资源被收回。返回值:成功返回0出错则返回错误码所用头文件:#include,2020/4/27,11,2Linux线程举例,例在主函数中创建一个线程,其功能是循环输出3次“Thisisthesecondpthread.”;主线程也循环输出3次“Thisisthemainpthread.”,观察并分析它们的执行过程。,源程序清单,文件名:pthread.c#include#include/线程所用头函数/*定义线程的执行函数*/voidthread(void)/必须使用void作为返回类型inti;for(i=0;i3;i+)printf(“Thisisthesecondpthread.n”);/显示自己是子线程sleep(1);,2020/4/27,12,main()/*定义线程内部标识*/pthread_tthreadid;inti,ret;/*创建一个子线程并指定执行函数,函数不带参数*/ret=pthread_create(,/*主线程循环输出3次*/for(i=0;i3;i+)printf(Thisisthemainpthread.n);sleep(1);pthread_join(threadid,NULL);/等待子线程结束exit(0);,2020/4/27,13,带有线程的源程序在进行编译时需要使用参数-lpthread:gcc-lpthreado目标文件名源文件名编译和运行该程序后的结果为:,由上述输出结果可以看出,当线程作为调度的基本单位时,创建的子线程连同主线程共形成两个线程被操作系统调度,因而产生以上类似于进程随机调度的运行结果。,2020/4/27,14,3多线程举例,例定义一个多线程标识符数组,然后创建多个线程,每个线程执行的程序都是显示该线程标识符及其下标值。主线程则等待每个线程终止,显示结束提示符后结束运行。设创建5个子线程。,程序清单:文件名multhread.c#include#include#defineMAXTHREAD5/定义多线程标识符数组元素个数void*threaf_fuction(void*arg)/定义线程执行函数printf(arg);printf(n);,2020/4/27,15,/*主线程*/main()inttid;pthread_tthreadsMAXTHREAD;/定义多线程标识符数组/*定义线程执行函数的参数*/charmessage10=thread1,thread2,thread3,thread4,thread5;/*循环创建5个子线程*/inti;for(i=0;i5;i+)/*创建子线程并指定执行函数及参数*/tid=pthread_create(,2020/4/27,16,/*主线程*/for(i=0;i5;i+)pthread_join(threadsi,NULL);/等待5个子线程终止printf(Allthreadfinished.n);/输出结束提示exit(0);,(七)Linux多线程同步下的信号量,Mutex:变量定义:pthread_mutex_tmut;初始化:pthread_mutex_init(,2020/4/27,17,voidthread1()pthread_mutex_lock(,Linux下利用互斥锁实现线程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位教师招聘考试化学学科专业知识试卷试题
- 桂林师范高等专科学校《食品安全学》2024-2025学年第一学期期末试卷
- 长治幼儿师范高等专科学校《社区社会工作》2024-2025学年第一学期期末试卷
- 2025年高级运维工程师技能评估题库及答案详解
- 2025年初级客服代表面试实战指南与模拟题集
- 2025年工业设计师面试指南及模拟题答案全解析
- 2025心理咨询师之心理咨询师基础知识通关考试题库带答案解析
- 2025年钎焊技术考试预测题及复习建议
- 曲阜远东职业技术学院《体育(一)》2024-2025学年第一学期期末试卷
- 2025年建筑项目预算员招聘考试试题与答案解析
- 2025年中职高考对口升学(旅游概论)真题试卷附参考答案
- 我心中的英雄:学生心目中的榜样
- 电竞赞助合同协议
- 2024年下半年广西现代物流集团社会招聘校园公开招聘109人笔试参考题库附带答案详解
- JJF 2145-2024场所监测用固定式X、γ辐射剂量率监测仪校准规范
- 记背手册02:北京高考古诗文背诵与默写篇目(打印版)-备战2025年高考语文一轮复习考点帮(北京专用)
- 2025年中医推拿人员劳动合同范文
- 医院感染知识岗前培训
- 高标准农田建设项目验收技术方案
- 《如何应对焦虑》课件
- (高清版)DB21∕T 3378-2021 辽宁省松材线虫病检验鉴定技术规程
评论
0/150
提交评论