




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四进度与线程一、实验目的1)理解进度的独立空间;2)理解线程的有关观点。二、实验内容与要求1、查阅资料,掌握进度创立和结构的有关知识和线程创立和结构的有关知识,认识C语言程序编写的有关知识;2、理解进度的独立空间的实验内容及步骤(1)编写一个程序,在其main()函数中定义一个变量shared,对其进行循环加/减操作,并输出每次操作后的结果;2)使用系统调用fork()创立子进度,察看该变量的变化;3)改正程序把shared变量定义到main()函数以外,重复第(2)步操作,察看该变量的变化。3、理解线程的实验步骤1)编写一个程序,在其main()函数中创立一个(或多个)线程,察看该线程是怎样与主线程并发运转的。输出每次操作后的结果;(2)在main( )函数外定义一个变量shared(全局变量),在main( )中创立一个线程,在main( )中和新线程shared进行循环加/减操作,察看该变量的变化;(3)改正程序把shared变量定义到main()函数以内,重复第(2)步操作,察看该变量的变化。4、对整个实验过程进行剖析总结,给出详尽步骤;察看上述进度履行结果,并剖析原由;提交源程序清单,并附带流程图与说明。三、实验过程1、进度的与线程的创立和结构(1).进度的创立和结构进度简单来说就是在操作系统中运转的程序,它是操作系统资源管理的最小单位。可是进度是一个动向的实体,它是程序的一次履行过程。进度和程序的差别在于:进度是动向的,程序是静态的,进度是运转中的程序,而程序是一些保留在硬盘上的可履行代码。新的进度经过克隆旧的程序(目行进度)而成立。fork( )?和?clone( )(关于线程)系统调用可用来成立新的进度。(2)线程的创立和结构线程也称做轻量级进度。就像进度同样,线程在程序中是独立的、并发的履行路径,每个线程有它自己的货仓、自己的程序计数器和自己的局部变量。可是,与独立的进度对比,进度中的线程之间的独立程度要小。它们共享内存、文件句柄和其余每个进度应有的状态。线程的出现也其实不是为了代替进度,而是对进度的功能作了扩展。进度能够支持多个线程,它们看似同时履行,但互相之间其实不一样步。一个进度中的多个线程共享同样的内存地点空间,这就意味着它们能够接见同样的变量和对象,并且它们从同一堆中分派对象。只管这让线程之间共享信息变得更简单,但你一定当心,保证它们不会阻碍同一进度里的其余线程。线程与进度相像,是一段达成某个特定功能的代码,是程序中单个次序的流控制,但与进度不一样的是,同类的多个线程是共享同一块内存空间和一组系统资源的,而线程自己的数据往常只有微办理器的存放器数据,以及一个供程序履行时使用的货仓。因此系统在产生一个线程,或许在各个线程之间切换时,负担要比进度小得多,正因这样,线程也被称为轻型进度(light-weightprocess)。一个进度中能够包括多个线程。、理解进度的独立空间流程图以下所示:shared=1pid=fork( )ERRORpid<0YNYpid>0输出shared操作Npid==0输出shared操作Y(1)编写一个程序,在其
main
()函数中定义一个变量
shared
,对其进行循环加
/减操作,并输出每次操作后的结果源程序以下所示
:#include<>intmain( ){intshared=1;shared++;printf("%d\n",shared);shared--;printf("%d\n",shared);shared++;printf("%d\n",shared);shared--;printf("%d\n",shared);return0;}运转结果以下图:(2)使用系统调用fork()创立子进度,察看该变量的变化增添进度创立语句后,程序运转结果以下,子进度和父进度都履行了操作,且相互之间关于同一个变量shared的自加操作互不影响。代码以下列图所示:运转结果以下列图所示:(3)改正程序把shared变量定义到main()函数以外,重复第(2)步操作,察看该变量的变化。当把shared放到主函数以外时,运转结果和内部时对比,并未发生变化。、理解线程流程图以下所示:开始开始设置全局变量创立主进度创立线程Sleep1SShared++输出Shared的值结束开始创立主进度开始设置全局变量创立线程Sleep1SShared++输出Shared的值结束1)编写一个程序,在其main()函数中创立一个(或多个)线程,察看该线程是怎样与主线程并发运转的。输出每次操作后的结果源代码部分以下所示:运转结果以下列图所示:原文链接:(2)Linux开发模式与FreeBSD开发模式的比较。(2)在main( )函数外定义一个变量main( )中和新线程shared进行循环加
shared(全局变量),在/减操作,察看该变量的变化
main( )
中创立一个线程,在源代码以下所示:运转结果以下列图所示:(3)改正程序把
shared
变量定义到
main
()函数以内,重复第(
2)步操作,察看该变量的变化部分代码截图以下:在这类状况下,直接编译,会发生错误,截图以下:四、实验剖析与总结1.关于fork( )语句的使用仍是不够娴熟和清楚,在使用的过程中过于心急,对程序本真的内在含义理解不清楚,还要在课后仔细的学习和填补不足。2.实验过程中,沟通很重要,可是仍是要增强自己的学习能力,提升对程序的理解能力和使用技巧。开始时不知道该怎样结构线程,在查察了资料以后,开始略微有些理解了,在后边慢慢的实践过程中,逐渐对线程的创立和使用等有了更为深入的认识。4.在理解线程的有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南京技术合同范本
- 信息服务 招标合同范本
- 2025年辽宁省建筑安全员-C证(专职安全员)考试题库
- 债务合同范本 法院
- 债务加入合同范本
- 小学音乐综合性课堂的构建方法
- 2025上海市安全员-C证考试(专职安全员)题库附答案
- 劳务合同范本文档
- 肠道菌群检测的学习路径预测
- 劳务合同范本 英语
- 生产与运作管理-陈荣秋
- 病理生理学教学病生6休克课件
- 金鸡冠的公鸡绘本课件
- 日影朝向及长短
- 输尿管结石教学查房PPT课件(PPT 42页)
- 沙盘游戏治疗(课堂PPT)
- (完整版)学生的自我评价的表格
- 浙江心理健康教育B证材料(教案设计)
- 朴素贝叶斯分类器完整
- 教育系统绩效工资分配方案(共6页)
- 人教版数学三年级下册第一单元《位置与方向(一)》单元测试卷[附答案]
评论
0/150
提交评论