- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
名师线程部分课件
单线程和多线程的进程 进程创建 线程创建 进程、线程应用比较 多线程模型 线程已在许多系统中实现,但各系统实现的方式不同 用户级线程 supported above the kernel and managed without kernel support 即用户线程仅存在于用户空间中。对于这种线程的创建、撤消、切换、线程之间的同步与通信,都无需用系统调用来实现。 内核支持线程 supported and managed directly by the operating system 即无论是用户进程中的线程还是系统进程中的线程,它们的创建、撤消、切换、线程之间的同步与通信等,都是依靠内核实现的。在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是通过该控制块而感知某线程存在的,并对其加以控制。 用户级线程的实现 线程管理是由用户级的线程库来完成的 主要的三个线程库: POSIX Pthreads Win32 threads Java threads 优点:能快速地创建和管理。 缺点:如果内核是单线程的,那么任何一个用户级线程若执行阻塞系统调用进会引起整个进程阻塞,即使还有其它线程可以在应用程序内运行。 内核级线程 由操作系统内核直接支持 Examples Windows XP/2000 Solaris Linux Tru64 UNIX Mac OS X 绝大多数操作系统都支持内核线程。 线程库 线程库给开发人员提供了创建和管理线程的API。 主要有两种实现线程库的方式 provide the library entirely in user space with no kernel support. All code and data structures for the library exist in user space. implement kernel-level library supported directly by the O.S. Code and data structures for the library exist in kernel space. Invoking a function results in a system call to the kernel 有三种主要的线程库: (1) POSIX Pthreads, (2) Win32, and (3) Java Pthreads POSIX 标准定义的 (IEEE 1003.1c) API ,用来创建和同步线程。 通常,实现Pthread规范的线程库局限于 UNIX 操作系统系列中 (Solaris, Linux, Mac OS X) Pthreads 举例: 创建一个独立的线程来计算一个非负整数N的累加和。 程序分析 假设程序可执行文件名为testthread,运行时传递一个非负数值参数,程序创建一个子线程计算该数值的累加和,然后主线程输出结果。 例如 testthread 20 定义主线程和子线程共享的全局整型变量sum; 定义线程函数void * runner(void *param); main(int argc, char *argv[ ]) /* *argv[ ])用来接收运行时传递的参数*/ { 创建子线程 ; 调度运行子线程,并把argv[ 1]中的参数值传递给线程; 主线程等待子线程结束; 子线程结束后,由主线程输出结果sum; } Pthreads Pthreads 程序说明 所有的pthread程序都要包括pthread.h头文件 pthread_t tid 定义了将要创建的线程的标识符 pthread_attr_t attr 声明代表了线程的属性,可以用pthread_attr_init(attr)设置属性的缺省值。 pthread_create函数可创建一个独立线程,除了传递线程标识符和线程属性外,还有函数名称,这里为runner,以便线程能够开始执行,最后传递由命令行提供的整数参数argv[1]。 程序此时有两个线程:main的初始线程和通过runnner 函数执行累加和的线程。 在创建了第二个线程后,main线程通过调用pthrea_join函数来等待runner线程的完成。 线程runner在调用了函数pthread_exit之后就完成了。 程序举例 #include pthread.h void* fun1() { int i; for (i=0;i500;i++) fputc(‘x’,stderr); } void* fun2() { int i; for (i=0;i500;i++) fputc(‘y
您可能关注的文档
最近下载
- 人民版中华民族大家庭全册教学设计教案.doc
- 2020年江苏公务员考试《申论》真题(A类)及参考答案.pdf VIP
- 雷克萨斯-Lexus IS-产品使用说明书-IS300-ASE30L-AEZLZC-LEXUS雷克萨斯IS300OM53D87C_01-1705-00.pdf VIP
- 静配中心-高警示药品管理考核试题(附答案).docx VIP
- 静配中心-高警示药品管理考核试题.docx VIP
- 静配中心药品日常管理考核试题(+答案解析).docx VIP
- 静配中心药品日常管理考核试题及答案.docx VIP
- 静配中心业务知识考核试题题库及答案.docx VIP
- 人物细节描写课件.pptx VIP
- 精准医疗与传统治疗比较.docx VIP
文档评论(0)