- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程是一组指令的集合,或者是程序的特殊段,它可以在程序里
程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度。
多线程是多任务的特殊形式。通常,有两种类型的多任务:基于进程和基于线程的多任务。进程本质上是正在执行的程序。因此,基于进程的多任务就是允许您的计算机同时运行两个或者更多程序的特性。例如,基于进程的多任务允许您在使用电子制表软件或者浏览Internet的同时运行文字处理程序。在基于进程的多任务中,程序是调度程序可以分派的最小代码单元。
多线程是为了使得多个线程并行的工作以完成多项任务,以提高系统的效率。线程是在同一时间需要完成多项任务的时候被实现的。
使用线程的好处有以下几点:
·使用线程可以把占据长时间的程序中的任务放到后台去处理
·用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
·程序的运行速度可能加快
·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较游泳了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。
还有其他很多使用多线程的好处,这里就不一一说明了。
多线程应用
我们以客户/服务器应用模式中如何进行服务器程序设计为例,来说明多线程技术的应用。该程序是在DECnet-VAX网络邮箱上实现的。对于TCP/IP,除了改用捆绑的套接字(socket)来代替DECnet中的网络邮箱以监视客户的服务请求外,其他方面基本上是一样的。
为了简化说明,假定该服务程序只提供2类功能,分别由函数funcl( )和func2( )来实现。客户在请求服务时要指明功能号1或2。另外限制需要同时提供服务的客户数目。
多线程程序的基本设计思想是,为请求服务的每个客户建立1个线程,专门为该客户提供服务。限制客户数目就是限制同时存在的线程数目。这些动态建立的线程对象存放在数组中。通过查找该数组是否有空槽,来决定是否达到最大数目。同时利用该数组来管理这些动态存在的线程及相应的网络链路。整个程序由1个主程序和提供2类服务的2个子程序组成。主程序(主控线程)在完成初始化操作后,开始循环读取邮箱中的网络控制信息;在接收到连接请求信息后,主控线程就建立1个新线程,并指定相应的函数作为执行代码;如果客户要断开连接,则主控线程查找到相应的服务线程号,释放该服务线程使用的网络链路,并删除此线程。参见下页服务器程序的基本结构。函数原型:?????????????????? #include?pthread.hint?pthread_create(pthread_t?*restrict?tidp,const?pthread_attr_t?*restrict?attr,?void?*(*start_rtn)(void),void?*restrict?arg);
??? 返回值:若是成功建立线程返回0,否则返回错误的编号??? 形式参数:??? ?? ?? ?? ?? pthread_t *restrict tidp 要创建的线程的线程id指针??? ?? ?? ?? ?? const pthread_attr_t *restrict attr 创建线程时的线程属性??? ?? ?? ?? ?? void* (start_rtn)(void) 返回值是void类型的指针函数??? ?? ?? ?? ?? vodi *restrict arg?? start_rtn的行参?? 例题1:??? ?? 功能:测试建立一个新的线程??? ?? 程序名称: pthread_test.c??????
#include?pthread.h#include?stdio.hvoid?*create(void?*arg)...{????printf(new?thread?created?.....?);????}int?main(int?argc,char?*argv[])...{????pthread_t?tidp;????int?error;????error=pthread_create(tidp,NULL,create,NULL);????if(error!=0)????......{????????printf(pthread_create?is?not?created?...?);????????return?-1;????}????printf(prthread_creat
您可能关注的文档
- 演出简介 本场音乐会上您将能欣赏到卡洛·杰苏阿尔多作品。.PDF
- 漠河县委政法委.DOC
- 物主代词罗苗苗.pptx
- 牧草地,烧荒、烧炭等野外农事用火批准办事指南(简版).DOC
- 物理:13.4《认识动能和势能》课件2(沪粤版九年级上).ppt
- 猜一猜:什么动物小时候用四条腿走路,后来用两条腿走路,.PPT
- 王恭从会稽还.ppt
- 王国生会见第十一世班禅额尔德尼·确吉杰布.PDF
- 琼中县营根中心小学 盘月玲 2013年4月1.PPT
- 生物:《显微镜的使用》课件(新人教版必修1).ppt
- 2025年天津市冷链物流基地配套道路建设可行性研究报告.docx
- 2025年天津市母婴护理会所专业化服务升级路径可行性研究报告.docx
- 2025年成都市私立医院医美抗衰中心创建可行性研究报告.docx
- 2025年成都市淡化海水在城市道路清洗领域的应用可行性研究报告.docx
- 2025年上海市环卫厨余垃圾生物处理技术应用可行性研究报告.docx
- 2025年天津市花西子针对户外运动妆容的可行性.docx
- 2025年上海市生物发电于秸秆炭化还田协同发电的可行性研究.docx
- 2025年天津市物造纸在可降解农用地膜领域的应用可行性研究报告.docx
- 2025年天津市无人值守充电站智能运维可行性研究报告.docx
- 2025年天津市竹荪种植连作障碍防治技术可行性研究报告.docx
文档评论(0)