- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程环境.ppt
线程概念及分类 线程特点 线程的基本概念 线程的分类 线程特点 线程和进程相比有以下优点: “节俭”的多任务操作方式 线程间方便的通信机制 提高应用程序响应 使多CPU系统更加有效 改善程序结构 数据共享问题 “节俭”的多任务操作方式 启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段。 运行一个进程中的多个线程,彼此之间使用相同的地址空间、共享大部分数据、启动一个线程所花费的空间远远小于启动一个进程所花费的空间。线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。 对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式费时而不方便。 由于同一进程下的线程之间共享数据空间,它们共享全局变量、共享进程指令、大多数数据和打开的文件(如描述字)、信号处理程序和信号处置、当前工作目录、用户ID和组ID,一个线程的数据可以直接为其他线程所用,快捷方便。 对图形界面的程序尤其有意义 当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作 使用多线程技术,将耗时长的操作置于一个新的线程,可以避免这种尴尬的情况 使多CPU系统更加有效 操作系统会保证当线程数不大于CPU数目时不同的线程运行于不同的CPU上 改善程序结构 进程分为多个线程,成为几个独立或半独立的运行部分,程序利于理解和修改。 数据共享问题 有的变量不能同时被两个线程所修改,有的子程序中声明为静态的数据更有可能给多线程程序带来灾难性的打击,带来了同步问题。这些是最需要注意的地方。 线程的基本概念 线程是包含在进程中的一种实体,线程有自己的运行线索,可以完成一定的任务,可与其他线程共享进程中的共享变量及部分环境、相互之间协同来完成进程所要完成的任务。 下面我们看看现成的共性和个性。 共性 同一个进程中的线程都有共性:多个线程将共享同一个进程虚拟空间。 线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 个性 线程实现并发性的必要条件 个性 线程ID 寄存器组的值 线程的堆栈 错误返回码 线程的信号屏蔽码 线程的优先级 线程ID 每个线程都有自己的线程ID,这个ID在本进程中是唯一的。 寄存器组的值 一个线程切换到另一个线程上时,必须将原有的线程的寄存器集合的状态保存,以便将来该线程在被重新切换到时能得以恢复。 线程的堆栈 线程必须拥有自己的函数堆栈,使得函数 调用可以正常执行,不受其他线程的影响 错误返回码 不同线程应该拥有自己的错误返回码变量 线程的信号屏蔽码 线程的信号屏蔽码应该由线程自己管理, 但所有的线程都共享同样的信号处理器 线程的优先级 由于线程需要像进程那样能够被调度,那 么就必须要有可供调度使用的参数,这个 参数就是线程的优先级 线程的分类 从调度的角度,线程可以分为用户级线程和核心级线程。 线程基础 结合实例说明多线程编程中所使用到的一些函数和基本方法: 1.线程的基本操作函数 2.简单的多线程编程 线程的基本操作函数 先讲述4个基本线程函数,在调用它们前均要包括pthread.h头文件 1.创建线程函数 2.等待线程的结束函数 3.取自己线程ID函数 4.终止线程函数 创建线程函数 int pthread_create(pthread_t *tid,const pthread_attr_t *attr, void *(*func)(void *),void *arg); 函数thread 不需要参数,所以最后一个参数设为空指针;第二个参数我们也设为空指针,这样将生成默认属性的线程。创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。 等待线程的结束函数 Int pthread_join(pthread_ttid,void**status); 第一个参数为被等待的线程标识符 第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值 取自己线程ID函数 pthread_self(void); 线程都有一个ID在给定的进程内标识自己。 线程ID由pthread_creat返回,可 以取得自己的线程ID。 注:一个线程不能被多个线程等待,否 则第一个接收到信号的线程成功返回,其余调用pthread_join 的线程则返回错误代码ESR
您可能关注的文档
最近下载
- 六年级上册美术第7课 做做陶艺1 浙美版(2018秋).ppt VIP
- (5.2.1)--5.2由推理公式推求设计洪水.pdf VIP
- 2025年河北保定市竞秀区公开招聘社区工作者66名笔试备考试题及答案解析.docx VIP
- 穴位贴敷疗法课件.pptx VIP
- 2022《醋业市场发展的案例分析报告—以天缘醋业为例》10000字.doc VIP
- 支付农民工工资承诺书.docx VIP
- 《药用植物识别技术》课件——3.茎.ppt VIP
- “空椅子”技术及应用.pdf VIP
- 2025全国推广普通话宣传周PPT2025第28届推普周.pptx VIP
- 第28届全国推广普通话宣传周.pptx VIP
文档评论(0)