2017年操作系统实验报告11p_第1页
2017年操作系统实验报告11p_第2页
2017年操作系统实验报告11p_第3页
2017年操作系统实验报告11p_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告实验名称:线程控制实验计算机科学与技术学院目录一、实验目的和要求二、实验内容三、实验步骤四、实验结果与分析1单线程2.单线程(睡眠4s)3. 多线程4.多线程(每个子线程睡眠1s)5单线程与多线程对比五、程序源代码1单线程实验代码 2单线程实验代码六、实验体会、实验目的和要求通过本实验掌握在Linux操作系统中遵循Posix线程标准接口进行多线程程序编程,熟练掌握线程的创建Pthread_create(),线程的终止 pthread_exit(),等待线程合并 pthreadjoin()等线程控制操作,利用信号量 或者互斥锁实现线程建的同步。、实验内容问题:求1000000个浮

2、点数(精确到小数点后 4位)的平均值(和,最大值,最小值),具体的问题描述 流程图如下图图1所示:、实验步骤1、随机生成1000000个浮点数;2、创建4个子线程,分别求 250000个浮点数之和;3、完成1000000个浮点数之和并打印结果;4、统计多线程并发执行完成计算的时间;5、 写一个单线程程序,同样完成1000000个随机数求和的计算,统计计算时间,并和前面结果进行对比;6、 让单线程程序睡眠四秒钟、多线程程序各子程序睡一秒的条件下(两个程序总的睡眠时间相同),对比 执行结果;7、分析两次对比结果的差异,写出自己的见解。四、实验结果与分析1、 单线程完成1000000个浮点数的求和运

3、算所用的时间情况如下图图2所示:图2单线程计算时间分析:实验中每次随机产生一个 0到1之间的浮点数,1000000个这样的数相加的话的平总和大概就在 500000左右(按照随机数的平均值原理),实验中sum=499919.3750,显然结果正确,整个计算运行时间为 0.1086s。2、 单线程完成1000000个浮点数的求和运算,单线程中睡眠4秒钟,所用的时间情况如下图图3所示:图3单线程计算时间(睡眠4秒)分析:根据上一次单线程的执行情况来看,这一次让单线程睡眠4秒钟,最后执行时间刚好就是4秒加上计算时间。也就是说计算1000000个浮点数的总和平均时间约为0.1s。3、 四个子线程共同完成

4、1000000个浮点数的求和计算所用时间情况如下图图4所示:图4多线程计算时间分析:因为这次是4个子线程并发运行,每个子线程只需计算250000个浮点数的总和,理想情况下这时候的运行时间应该是这单线程中计算时间的四分之一。从图中可以看到执行时间是0.0233s,很显然这个时间约为单线程求 1000000个浮点数之和的时间(0.1086)的四分之一,符合预期的结果。4、四个子线程共同完成 1000000个浮点数的求和计算,其中每个子线程睡眠1秒钟,最终所用时间情况如下图图5所示:图5多线程计算时间(每个子线程睡眠1秒)分析:这里四个子线程每个子线程睡眠一秒,但由于四个子线程并发同步的在执行,当一

5、个子线程在睡眠时,另外一个子线程却仍然在继续求和计算,因此他们一起合作同步完成1000000个浮点数的计算所需的时间就是1秒加上上图中不睡眠的时候的计算时间。从图中可以看到1.0261s- 1S+0.0233S所以最终的结果符合预期值。5、单线程计算时间(睡眠4S)与多线程计算时间(每个子线程睡眠1S)对比效果如下图图 6所示:图6单线程(睡眠4S)与多线程(每个子线程睡眠1S)计算时间对比图五、程序源代码/*FileName : signal_thread.c *Author :*Date : 2013/11/22*/#i nclude <stdio.h>#i nclude &l

6、t;stdlib.h>#in clude <p thread.h>#in clude <time.h>#i nclude <sys/time.h>#defi ne LOOP 1000000float SUM=0;void *ADD()int i;sran d(time(NULL);for(i=0;i<LO OP ;i+)SUM += (float)(ra nd()/(float)RAND_MAX);slee p( 4);int mai n()p thread_t p;int result;float time;struct timeval sta

7、rt;struct timeval end;gettimeofday( &start,NULL);result=p thread_create(&p ,NULL,ADD,NULL); if(result!=0)prin tf("Create Thread of ADD Failure'n"); exit(-1);p thread_joi n(p,N ULL); gettimeofday( &en d,NULL);time = (float)(e nd.tv_sec - start.tv_sec)*1000000+(float)(e nd.tv

8、_usec - start.tv_usec)/1000000;prin tf("Sig nal_Thread_Sum:%.4fn",SUM);prin tf("Sig nal_Thread_Executio n_Time:%.4fs(slee p 4 sec)n",time); return 0;/* *FileName : multi_thread.c *Author : wangtao *Date : 2013/11/22 */ #in elude <stdio.h> #i nclude <stdlib.h> #in clud

9、e <p thread.h> #in clude <time.h> #in clude <sys/time.h> #defi ne LOOP 25000 p thread_mutex_t mutex;float SUM=0;void ADD(i nt * k)int i;sran d(time(NULL);for(i=0;i<LO OP ;i+)p thread_mutex_lock(&m utex);SUM += (float)(float)ra nd()/RAND_MAX); p thread_mutex_ uni ock (&m

10、utex);prin tf(" pthread%d:%.4fn",*k,SUM);slee p(1);int main( void)pthread_t p1,p 2, p3,p4;int result1,result2,result3,result4;int k1=1,k2=2,k3=3,k4=4;struct timeval start;struct timeval end;float time;gettimeofday( &start,NULL);p thread_mutex_i nit(&m utex,NULL);result仁 pthread_cre

11、ate(&p 1,NULL,(void*)ADD, &k1);result2=pthread_create(&p 2,NULL,(void*)ADD, &k2);result3=pthread_create(&p 3,NULL,(void*)ADD, &k3);result4=pthread_create(&p 4,NULL,(void*)ADD, &k4); if(result1!=0|result2!=0|result3!=0|result4!=0)prin tf("Create ChildThread Failur

12、e!n");exit(1);p thread_joi n(p 1,NULL);p thread_joi n(p 2,NULL);p thread_joi n(p 3,NULL);p thread_joi n(p 4,NULL);gettimeofday( &en d,NULL);time = (float)(e nd.tv_sec - start.tv_sec)*1000000 + (float)(e nd.tv_usec - start.tv_usec)/1000000;prin tf("SUM = %.4fn",SUM);prin tf("M

13、ulti_thread_time = %.4fs(Each child thread slee p 1 sec)n",time); return 0;六、实验体会这是第一次使用多线程编程编写代码,第一次直观感受到这种多线程编程对程序的执行速率的影响。 虽然说操作系统课程已经上了好几个星期了,课堂上一直在学习多线程编程的算法思想,但是那只是书面 上的讲授,真正直观的感受和体会还是得依靠实验来了解。因为之前就接触过linux系统,所以对于程序的编译执行方面还是问题不大,最主要的就是代码的编写问题。一开始到实验室完全不知道要做什么,因为根本连实验内容都不知道,直到助教在大屏幕上显示这个实验 题目,我才开始了解实验的题目和要求。这里我就是想建议一下老师您可以应该给我们实验题目,让我们 在实验前就了解一下实验内容,不然到了实验室都不知道到底要干嘛。读懂了解题意之后,我就开始参考 所给的一些线程创建函数说

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论