- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
多线程应用程序设计
摘要:嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入系统极为重要的组成部分。嵌入式操作系统具有能够有效管理越来越复杂的系统资源,能够把硬件虚拟化,能够提供库函数、驱动程序及工具集等特点。Linux是最常见的嵌入式操作系统。目前Linux已广泛应用于信息家电、数据网络、工业控制、医疗卫生航空航天等众多领域。在本文中主要介绍多线程应用程序设计,通过编写经典的“生产者消费者”问题的实验,可以进一步熟悉Linux中的多线程编程,并且掌握用信号量处理线程间的同步和互斥问题。
Linux多线程编程更好的熟悉在Linux下进行编程的方法,熟悉ARM开发板的使用和开发环境的设置以及熟悉几个重要的PTHREAD 库函数的使用,掌握共享锁和信号量的使用方法。
关键词:嵌入式、多线程编程、互斥锁、条件变量
一、课题介绍
在嵌入式系统中,进程是程序执行和资源分配的基本单位。每个进程都拥有自己的数据段、代码段和堆栈段,这就造成了进程在进行切换等操作时都需要有比较复杂的上下文切换等动作。为了进一步减少处理机的空转时间,支持多处理器以及减少上下文切换开销,进程在演化中出现了另一个概念——线程。它是进程内独立的一条运行路线,处理器调度的最小单元,也可以称为轻量级进程 。线程可以对进程的内存空间和资源进行访问,并与同一进程中的其他线程共享。因此,线程的上下文切换的开销比创建进程小很多。
同进程一样,线程也将相关的执行状态和存储变量放在线程控制表内。一个进程可以有多个线程,也就是有多个线程控制表及堆栈寄存器,但却共享一个用户地址空间。在多线程系统中,进程与进程的关系如图1.1所示。
图1.1 进程与线程关系
二、课题原理
(一)线程与多线程
为什么有了进程的概念后,还要再引入线程呢?理由一是和进程相比,它是一种非常节俭的多任务操作方式。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种昂贵的多任务工作方式。而运行于一个进程中的多个线程,它们彼此之间使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于启动一个进程所花费的空间,而且,线程间彼此切换所需的时间也远远小于进程间切换所需要的时间。据统计,总的说来,一个进程的开销大约是一个线程开销的30倍左右。
理由二是线程间方便的通信机制。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过通信的方式进行,这种方式不仅费时,而且很不方便。线程却不一样,由于同一进程下的线程之间共享数据空间,所以一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。当然,数据的共享也带来其他一些问题,有的变量不能同时被两个线程所修改,有的子程序中声明为static的数据更有可能给多线程程序带来灾难性的打击,这些正是编写多线程程序时最需要注意的地方。
那么使用多线程有什么的优点呢?多线程程序作为一种多任务、并发的工作方式,优点有:(1)提高应用程序响应。这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作置于一个新的线程,可以避免这种情况。(2)使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。(3)改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
线程库函数
Linux系统下的多线程遵循POSIX(Portable Operating System Interface of Unix /可移植性操作系统接口标准)线程接口,称为pthread。编写Linux下的多线程程序,需要使用头文件 pthread.h。POSIX标准是由IEEE(电气和电子工程师协会)开发 ,是由ANSI(美国国家标准学会)和ISO(国际标准化组织)标准化。Linux创建进程所使用的函数是fork()或者vfork()。而对线程的创建和管理Linux可以使用POSIX的线程库pthreads提供的APIs(应用编程接口)。
接下来介绍线程库函数。线程库中用于创建和管理线程的函数主要有6个,它们是:
pthread_create()用于创建线程;
pthread_join()用于等待线程结束;
pthread_self()用于获取线程ID号;
pthread_detach()用于让线程脱离;
pthread_exit() 用于终止线程;
pthread_cancel() 用于取消
您可能关注的文档
- 外贸实体店将何去何从.doc
- 外贸家纺业务操作流程.doc
- 外贸报关物流常用知识.doc
- 外贸新手是如何做外贸的.doc
- 外贸服装尺寸术语集合.doc
- 外贸跟单的详细流程0.doc
- 外贸:接到订单后该做的事.doc
- 外资代表处和外商独资企业的区别.doc
- 外资企业精细化管理–采购流程图.doc
- 外资疯狂围剿股指期货图谋控制中国核心产业.doc
- 河北唐山半壁店钢铁集团2024应届高校毕业生招聘重点基础提升模拟试题(共100题)附带答案通关秘籍题.docx
- 河南灵化集团有限公司整理校园招聘公开引进高层次人才笔试(共100题)答案真题题库(含答案).docx
- 河北衡水远大集团棉纺织总厂2024年招聘1人历年高频考题难、易错点模拟试题(共100题)附带答案大全.docx
- 河北建工集团完整版招聘193人高频考题难、易错点模拟试题(共100题)附带答案题库大全及参考答案(研.docx
- 河北宣化工程机械股份有限公司2023-24年招聘172人公开引进高层次人才笔试参考题库(共100题).docx
- 河南省顺河回族区历年医疗保险管理办公室招考编外合同工高频难、易错点200题模拟试题题库及答案【易错题.docx
- 河南华英禽业集团内部使用招聘应届高校毕业生88人高频难、易错点100题模拟试题附带答案真题题库(各地.docx
- 河南黄河实业集团毕业生专项招聘生产储备岗100题模拟试题附带答案完整版及参考答案(必威体育精装版).docx
- 浙江富帮集团有限公司2024年毕业生专项招聘生产储备岗100题模拟试题附带答案必考题.docx
- 河北省高营企业集团公司2023-24年应届高校毕业生招聘重点基础提升模拟试题(共100题)附带答案大.docx
文档评论(0)