下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统实验报告实验名称:线程控制实验计算机科学与技术学院目录一、实验目的和要求 2.二、实验内容2.三、实验步骤 2.四、实验结果与分析 3.1 单线程3.2 单线程(睡眠4s)3.3 多线程4.4 多线程(每个子线程睡眠1s).4.5 单线程与多线程对比 5.五、程序源代码 5.1 .单线程实验代码 5.2 .单线程实验代码 6.六、实验体会 7.一、实验目的和要求通过本实验掌握在 Linux操作系统中遵循 Posix线程标准接口进行多线程程序编程 ,熟 练掌握线程的创建pthread_create(),线程的终止pthread_exit(),等待线程合并 pthread_joi n()等
2、线程控制操作,利用信号量或者互斥锁实现线程建的同步。二、实验内容问题:求1000000个浮点数(精确到小数点后 4位)的平均值(和,最大值,最小值),具体的问题描述流程图如下图图1所示:三、实验步骤1、随机生成1000000个浮点数;2、创建4个子线程,分别求 250000个浮点数之和;3、完成1000000个浮点数之和并打印结果;4、统计多线程并发执行完成计算的时间;5、 写一个单线程程序,同样完成1000000个随机数求和的计算,统计计算时间,并和前 面结果进行对比;6、让单线程程序睡眠四秒钟、多线程程序各子程序睡一秒的条件下(两个程序总的睡眠时间相同),对比执行结果;7、分析两次对比结果
3、的差异,写出自己的见解。四、实验结果与分析1、单线程完成1000000个浮点数的求和运算所用的时间情况如下图图2所示:图2单线程计算时间分析:实验中每次随机产生一个 0到1之间的浮点数,1000000个这样的数相加的话的平总和大概就在 500000左右(按照随机数的平均值原理),实验中sum=499919.3750显然结果正确,整个计算运行时间为0.1086s。2、单线程完成1000000个浮点数的求和运算,单线程中睡眠4秒钟,所用的时间情况如下图图3所示:图3单线程计算时间(睡眠4秒)分析:根据上一次单线程的执行情况来看,这一次让单线程睡眠4秒钟,最后执行时间刚好就是4秒加上计算时间。也就是
4、说计算1000000个浮点数的总和平均时间约为0.1s。3、四个子线程共同完成 1000000个浮点数的求和计算所用时间情况如下图图4所示:图4多线程计算时间分析:因为这次是 4个子线程并发运行,每个子线程只需计算250000个浮点数的总和,理想情况下这时候的运行时间应该是这单线程中计算时间的四分之一。从图中可以看到执行时间是0.0233s,很显然这个时间约为单线程求1000000个浮点数之和的时间(0.1086 )的四分之一,符合预期的结果。4、四个子线程共同完成 1000000个浮点数的求和计算,其中每个子线程睡眠1秒钟,最终所用时间情况如下图图 5所示:图5多线程计算时间(每个子线程睡眠
5、1秒)分析:这里四个子线程每个子线程睡眠一秒,但由于四个子线程并发同步的在执行,当 一个子线程在睡眠时,另外一个子线程却仍然在继续求和计算,因此他们一起合作同步完成1000000个浮点数的计算所需的时间就是1秒加上上图中不睡眠的时候的计算时间。从图中可以看到1.0261s胡S+0.0233S ,所以最终的结果符合预期值。5、单线程计算时间(睡眠4s)与多线程计算时间(每个子线程睡眠1s)对比效果如下图图 6所TerminalSjvtmulti tfirt*ad c xtaosinutuntu: -/Desktaptaoslrubuntu:*/Dektap$ ./signal5ignal_Thr
6、ead.Sum:500324 * 5250Signal-Thread-Executioii-Time:4.1042s (sleep 4 sec) taoslrubun七七口p$ ./multipthxeadJ:43544.5859ptTvread2 : 47610 . 367pthrfeadl49348.9492 pthxead4:50011 * 0977SUM = 50011.0977Multl_thread_timfi = 1.C24&S(Each chlld_thread sleep 1 aee) taosixubuntu:7Desktop?图6单线程(睡眠4s)与多线程(每个子线程睡眠
7、1s)计算时间对比图五、程序源代码/*FileName : signal_thread.c*Author :*Date : 2013/11/22*/#i nclude #i nclude #i nclude #in clude #i nclude #defi ne LOOP 1000000float SUM=0;void *ADD()int i;sran d(time(NULL);for(i=0;iLOOP;i+)SUM += (float)(ra nd()/(float)RAND_MAX);sleep(4);int mai n()pthread_t p;int result;float ti
8、me;struct timeval start;struct timeval end;gettimeofday(&start,NULL);result=pthread_create(&p,NULL,ADD,NULL);if(result!=O)prin tf(Create Thread of ADD Failure n); exit(-1);pthreadoi n(p,NULL);gettimeofday(&en d,NULL);time = (float)(e nd.tv_sec - start.tv_sec)*1000000+(float)(en d.tv_usec - start.tv_
9、usec)/1000000;prin tf(Sig nal_Thread_Sum:%.4fn,SUM);prin tf(Sig nal_Thread_Executio n_Time:%.4fs(sleep 4 sec)n,time); return 0;/*FileName : multi_thread.c*Author : wangtao*Date : 2013/11/22*/#i nclude #i nclude #i nclude #in clude #i nclude #defi ne LOOP 25000pthread_mutex_t mutex;float SUM=0;void A
10、DD(i nt * k)int i;sran d(time(NULL);for(i=0;iLOOP;i+)pthread_mutex_lock(&m utex);SUM += (float)(float)ra nd()/RAND_MAX); pthread_mutex_ uni ock(&m utex);prin tf(pthread%d:%.4fn,*k,SUM);sleep(1);int main( void)pthread_t p1,p2,p3,p4;int result1,result2,result3,result4;int k1=1,k2=2,k3=3,k4=4;struct ti
11、meval start;struct timeval end;float time;gettimeofday(&start,NULL);pthread_mutex_i nit(&mutex,NULL);result仁pthread_create(&p1,NULL,(void*)ADD,&k1);result2=pthread_create(&p2,NULL,(void*)ADD,&k2);result3=pthread_create(&p3,NULL,(void*)ADD,&k3);result4=pthread_create(&p4,NULL,(void*)ADD,&k4);if(resul
12、t1!=0|result2!=0|result3!=0|result4!=0)prin tf(Create ChildThread Failure!n);exit(1);pthreadoi n( p1,NULL);pthreadoi n( p2,NULL);pthreadoi n( p3,NULL);pthreadoi n( p4,NULL);gettimeofday(&en d,NULL);time = (float)(e nd.tv_sec- start.tv_sec)*1000000+ (float)(e nd.tv_usecstart.tv_usec)/1000000;prin tf(
13、SUM = %.4fn,SUM);prin tf(Multi_thread_time = %.4fs(Each child thread sleep 1 sec)n,time);return 0;六、实验体会这是第一次使用多线程编程编写代码,第一次直观感受到这种多线程编程对程序的执行速率的影响。虽然说操作系统课程已经上了好几个星期了,课堂上一直在学习多线程编程的算法思想,但是那只是书面上的讲授,真正直观的感受和体会还是得依靠实验来了解。因为之前就接触过linux系统,所以对于程序的编译执行方面还是问题不大,最主要的就是 代码的编写问题。一开始到实验室完全不知道要做什么,因为根本连实验内容都不知道,直到助教在大屏幕上显示这个实验题目,我才开始了解实验的题目和要求。 这里我就是想建议一下老师您可以应该给我们实验题目,让我们在实验前就了解一下实验内容, 不然到了实验室都不知道到底要干嘛。读懂了解题意之后,我就开始参考所给的一些线程创建函数说明来
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工作内容变更与合同变更界定
- 境外应急预案流程(3篇)
- ups断电应急预案(3篇)
- 城建产品营销方案(3篇)
- 东莞会展活动策划方案(3篇)
- 及时转型营销方案(3篇)
- 斗鱼引流活动方案策划(3篇)
- 景区节前营销方案(3篇)
- 栽种鲜花活动方案策划(3篇)
- 水系漏电应急预案(3篇)
- Unit2HealthyLifestyle单词讲解课件-高中英语人教版选择性
- 2025至2031年中国荧光增白剂ER行业投资前景及策略咨询研究报告
- 《北斗导航系统的基础原理》课件
- 2025年国航机务系统AMECO工程师岗位校园招聘笔试参考题库附带答案详解
- 水电站项目建设投资后评价报告
- 制造业端到端业务流程
- 滚动轴承设计计算
- 2025年浙能集团招聘笔试参考题库含答案解析
- 护理投诉纠纷处理与沟通
- 建筑行业的智能建筑安全培训
- 济南轨道交通集团运营有限公司招聘笔试真题2023
评论
0/150
提交评论