版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单线程和多线程的进程,进程创建,进程A 栈 堆 BSS区 全局变量 代码段,进程B 栈 堆 BSS区 全局变量 代码段,Fork(),线程创建,进程A 线程A 栈 堆 BSS区 全局变量 代码段,线程B 栈,Pthread_creat(),进程、线程应用比较,多线程模型,线程已在许多系统中实现,但各系统实现的方式不同 用户级线程 supported above the kernel and managed without kernel support 即用户线程仅存在于用户空间中。对于这种线程的创建、撤消、切换、线程之间的同步与通信,都无需用系统调用来实现。 内核支持线程 supported
2、and managed directly by the operating system 即无论是用户进程中的线程还是系统进程中的线程,它们的创建、撤消、切换、线程之间的同步与通信等,都是依靠内核实现的。在内核空间还为每一个内核支持线程设置了一个线程控制块,内核是通过该控制块而感知某线程存在的,并对其加以控制。,用户级线程的实现,线程管理是由用户级的线程库来完成的 主要的三个线程库: POSIX Pthreads Win32 threads Java threads 优点:能快速地创建和管理。 缺点:如果内核是单线程的,那么任何一个用户级线程若执行阻塞系统调用进会引起整个进程阻塞,即使还有其它
3、线程可以在应用程序内运行。,内核级线程,由操作系统内核直接支持 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-
4、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规范的线程库局限于 UNI
5、X 操作系统系列中 (Solaris, Linux, Mac OS X),Pthreads,举例: 创建一个独立的线程来计算一个非负整数N的累加和。,程序分析,假设程序可执行文件名为testthread,运行时传递一个非负数值参数,程序创建一个子线程计算该数值的累加和,然后主线程输出结果。 例如 testthread 20 定义主线程和子线程共享的全局整型变量sum; 定义线程函数void * runner(void *param); main(int argc, char *argv ) /* *argv )用来接收运行时传递的参数*/ 创建子线程 ; 调度运行子线程,并把argv 1中的参
6、数值传递给线程; 主线程等待子线程结束; 子线程结束后,由主线程输出结果sum; ,Pthreads,#include #include int sum; /* this data is shared by the thread(s) */ void *runner(void *param); /* the thread */ main(int argc, char *argv ) pthread_t tid; /* the thread identifier */ pthread_attr_t attr; /* set of attributes for the thread */ /* g
7、et the default attributes */ pthread_attr_init( ,Pthreads,void *runner(void *param) int upper = atoi(param); int i; sum = 0; if (upper 0) for (i = 1; i = upper; i+) sum += i; pthread_exit(0); ,程序说明,所有的pthread程序都要包括pthread.h头文件 pthread_t tid 定义了将要创建的线程的标识符 pthread_attr_t attr 声明代表了线程的属性,可以用pthread_at
8、tr_init( for (i=0;i500;i+) fputc(x,stderr); void* fun2() int i; for (i=0;i500;i+) fputc(y,stderr); ,程序举例,int main() pthread_t t1,t2; pthread_create( ,程序举例,#include void* fun (char *ch) int i; for (i=0;i500;i+) fputc(*ch,stderr); ,程序举例,int main() pthread_t t1,t2; char c1=x,c2=y; pthread_create( ,程序举例
9、,#include struct para char cc; int looptimes; ; void* fun (struct para *ch) int i; for (i=0;ilooptimes;i+) fputc(ch-cc,stderr); ,程序举例,int main() pthread_t t1,t2; struct c1,c2; c1.ch=x; c2.ch=y; c1.looptimes=500; c2.looptimes=100; pthread_create( ,Linux Threads,Linux 内核在2.2版中引入了线程机制。Linux提供了fork,这是具有传统进程复制功能的系统调用。Linux还提供了clone,其功能类似于创建一个线程。Clone与fork的行为很相似,它不是创建调用进程的复制,而是创建一个独立的进程以共享原来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中职幼儿教育(幼儿思维能力培养)试题及答案
- 2025年中职葡萄酒文化与营销(葡萄酒文化传播)试题及答案
- 2025年高职第三学年(虚拟现实技术应用)VR项目开发阶段测试题及答案
- 2025年中职(仓储管理综合实训)运营实操试题及答案
- 巴塞罗那介绍英语
- 中国科学技术大学简介
- 养老院老人生活娱乐设施管理制度
- 养老院老人康复理疗师职业发展规划制度
- 养老院老人健康监测人员晋升制度
- 养老院安全巡查制度
- GB/T 4074.6-2024绕组线试验方法第6部分:热性能
- DB32-T 4111-2021 预应力混凝土实心方桩基础技术规程
- 不同时代的流行音乐
- 医疗卫生机构6S常态化管理打分表
- 几种常用潜流人工湿地剖面图
- vpap iv st说明总体操作界面
- 2023人事年度工作计划七篇
- LY/T 1692-2007转基因森林植物及其产品安全性评价技术规程
- GB/T 20145-2006灯和灯系统的光生物安全性
- 螺纹的基础知识
- 蜂窝煤成型机课程设计说明书
评论
0/150
提交评论