收藏 分销(赏)

操作系统课设报告.docx

上传人:二*** 文档编号:4595281 上传时间:2024-09-30 格式:DOCX 页数:10 大小:31.15KB
下载 相关 举报
操作系统课设报告.docx_第1页
第1页 / 共10页
本文档共10页,全文阅读请下载到手机保存,查看更方便
资源描述
绩: 衣故华复理工骨浣信息工程岩院课程设计 题目用多线程同步方法解决读者阅览问题系别 信息工程系 专业软件工程班级软件1151 姓名/学号指导教师杨铭熙 ZJY@localhost:~/DesktopClick to view your appointr File Edit View Search Terminal Help reader4 is sitting at 4 readers is sitting at 5 reader3 logout and exit readers Entered. reader4 is reading readers registered. sitting info--- reader6issittingat1reader?issittingat2 readersissittingat3reader4issittingat4 readersissittingat5 reader4 logout and exit reader9 Entered. readers is reading reader9 registered. sitting info--- reader6issittingat1reader?issittingat2 readersissittingat3reader9issittingat4 readersissittingat5readers logout and exit readerlO Entered. reader6 is reading readerlO registered. sitting info---- reader6issittingat1 reader?issittingat2readersissittingat3 reader9issittingat4readerlO is sitting at 5 reader6 logout and exit reader? is reading ZJY@localhost:*/Desktop File Edit View Search Terminal Help readerlO Entered, readers is reading readerlO registered. sitting info reader6 is sitting at 1 reader? is sitting at 2 readers is sitting at 3 reader9 is sitting at 4 readerlO is sitting at 5 readers logout and exitreader? is reading -sitting info----reader7issittingat2 readersissittingat3reader9issittingat4 readerlO is sitting at 5reader? logout and exit readers is reading -sitting info---- readers is sitting at 3 reader9 is sitting at 4 readerlO is sitting at 5 readers logout and exit reader9 is reading-sitting info---- reader9 is sitting at 4readerlO is sitting at 5 reader9 logout and exit readerlO is reading -sitting info---- readerlO is sitting at 5 readerlO logout and exit [ZJYQlocalhost Desktop]$ |变量说明: 6.调试过程 我翻看了老师给我们的ppt资料,了解了一下多线程的使用方法。创建进程,等 待进程结束以及销毁进程,还有信号灯的使用有了基本的了解,对该课程设计的解决 有了很好的基础,于是对中的一些有关进程抢占的程序进行了调试。 从结果中我理解到了:线程的抢占,然后想到自己的课程设计题目:用多线程同 步方法解决读者阅览问题,我决定了我要用io个线程。 在第一次完成代码后,经过调试,发现在打印当前座位信息是也必须上互斥锁, 修复了打印座位信息的错误。最后得到如下逻辑: 首先创建reader函数,开始用p(sem_sit)信号灯判断座位是否被坐满,然后用 p(sem_mutex)互斥信号灯实现上锁操作,然后找座位坐下。然后v(sem_mutex)解开互 斥锁,阅读四秒,上锁,打印座位信息,当前读者离开座位,读者注销。解开互斥锁, p(sem_sit)座位资源加一。main函数初始化信号灯,sem_init(&sem_sit,0,5); 〃初始 化座位资源信号灯sem_init(&sem_mutex,0,1 );//%U始化互斥信号灯。创建10个reader 线程。 7.总结 经过了这次操作系统课程设计,使我更加理解了多线程的作用和他们抢占的意 义,而且对信号量的使用和互斥锁的作用有了更加深刻的理解。能够找到程序死锁的 原因以及可能带来死锁的因素,并能够解决死锁问题。能够将多线程同步运行,共有 资源多线程使用能够使用信号灯以及互斥锁来避免发生与时间相关的错误,将多线程 程序正确无误的持续运行。 本科生课程设计成绩评定表 班级:姓名:学号: 序号 评分项目 满分 实得分 1 学习态度认真、遵守纪律 10 2 设计分析合理性 10 3 设计方案正确性、可行性、创造性 20 4 设计结果正确性 40 5 设计报告的规范性 10 6 设计验收 10 总得分/等级 评语: 注:最终成绩以五级分制记。优(90-100分)、良(80-89分)、中(70-79分)、 及格(60-69分)、60分以下为不及格 指导教师签名: 1 .设计目的与要求11.1设计目的1 1.2设计要求1 2.设计思想及系统平台1 2.1设计思想1 2.2系统平台及使用语言1 3 .详细算法描述2 4 .源程序清单4 5. 运行结果与运行情况7 6. 调试过程9 7. 总结1()本科生课程设计成绩评定表11 1 .设计目的与要求 1.1设计目的 通过研究linux多线程同步的问题,掌握对信号灯的操作方法,以及加深理解同步算 法的思想。 1.2设计要求用多线程同步解决读者阅览问题。设阅览室有5把椅子,几把椅子可用连续 存储单元。 要求: 1)每个读者进入阅览室后,即时显示“Entered”及其线程自定义标识, 还同时显示阅览室共有几名顾客及其所坐的位置。 2)至少有10个读者,每人阅览至少3秒钟。 3)多个读者须共享操作函数代码。 2 .设计思想及系统平台 2.1设计思想 进程是指在系统中运行的一个应用程序,线程是系统分配处理器时间资源的基本单元,或者 说进程之内独立执行的一个单元。对于操作系统而言,其调度单元是线程。一个进程至少包括一 个进程,通常将线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程, 就是所谓基「多线程的多任务。从而理解到我的课程设计所需要的进程数和线程在我的程序中怎 么用。首先座位是一个共享资源,而目.有一个数量限制,这里就要用到互斥信号灯的操作和判断 资源数量的信号灯。在算法上要认真仔细思考,弄清逻辑顺序,避免错误使用信号灯而带来的死 锁。 2.2系统平台及使用语言 本次课程设计是在linux的系统平台下使用C语言实现对读者阅览问题的编程, 所使用的工具有gedit编辑器、gcc编译器等。 3.详细算法描述reader 函数: 第一步:定义一个长度为5的整型数组buffer用来模拟连续的五个座位,一个座位资 源信号灯sem_sit,—个互斥信号灯sem_mutualo第二步:创建void* reader(int n)读者的函数,在函数的开始,使用sem_wait(&sem_sit) 判断是否有空的座位,如果有再使用sem_wail(&sem_mutual)5斥信号灯实现上锁, 来避免发生与时间相关的错误。 第三步:再是读者注册,用for循环遍历座位数组buffer,来寻找一个空的座位。 第四步:读者找到空座位坐下,使用sem_post(&sem_mutual)释放互斥锁。读者reading4 秒。 第五步:再使用互斥信号灯,用for信号灯打印现在的座位的入座情况。 第六步:打印完毕后,读者注销,释放座位,然后释放互斥锁,释放座位。 main函数: 第一步:定义plhread_t[10],用来储存reader进程的进程标识。 第二步:初始化 sem_sit 信号灯,sem_init(&sem_sit,0,5),初始化 sem_mutual 信号灯,sem_init(&sem_mutual,0,1); 第三步:使用for循环pthread_creat()创建10个reader进程。 第四步:使用pthreadjoin()等待所有reader结束。 main线程的处理函数流程图如下: 初始化信号灯 产生多进程等待子进程全部结束 main线程的处理函数: int main()(int i,j,pp,qq; pthread_tsem_init(&sem_sit,(),5); sem_init(&sem_mutual,0,1);for(i = 0;i < 10;i++){ pp = pthread_create(&t[i],NULL,(void *)reader,(void *)i); if(pp != 0)(printf(Mreader%derror,create again",i);i--;}) for(j = 0;j<10;j++)(qq = pthreadJoin(t[j],NULL); if(qq !=0)(printf("reader%d exit faiT'J+l); }) return 0; ) reader线程的处理函数流程图如下: 登记进入 找空座位读书 登记出来 reader线程的处理函数: void* reader(int n)(int i,l; sem_wait(&sem_sit);scm_wait(&scm_mutual); printf("reader%d Entered.\n",n+1);sleep(l); printf("reader%d registered.\n",n+1);for(i = 0;i < 5; i++)( if(buffer[i] ==-!){ buffer[i] = n; break;} Isem_post(&sem_mutual); sleep(4);prinlf("reader%d is reading\n",n+l); sem_wait(&sem_mutual);printf(usitting info\n"); for(l = 0;l < 5;l++){if(buffer[l] != -1) printf("reader%d is sitting at %d\nn,buffer[1]+1,14-1); }printf(u\n”); printf("reader%d logout and exit\n",n+l); bufferlij = -l;sem_post(&sem_niutual); sem_post(&sem_sit); ) 4.源程序清单 用户名:zjy5124 (IP: ) 源程序名:zjy.c 目标程序名:zjy 源程序清单如下: #include<stdio.h> #include<pthread.h> #includc<scmaphorc.h> int buffer[51 = (-1,-1,-1,-1,-1); sem_t sem_sit,sem_mutual; void* reader(int n)(int i,l; sem_wait(&sem_sit);sem_wait(&sem_mutual); printf("reader%d Entered.\n",n+1);sleep ⑴; printf("reader%d registered.\n",n+1);for(i = 0;i < 5; i++)( if(buffer[ij == -1)(bufferfi] = n; break;} }sem_post(&sem_mutual); sleep(4);printf("reader%d is reading\n",n+l); sem_wait(&sem_mutual);printf("silting info\n"); for(l = 0;l v5;l++){if(buffcr[l] != -1) printf("reader%d is sitting at %d\nn,buffer[1]+1,1+1);\n”); \n”); printf(" printf("reader%d logout and exit\n'',n+l);bufferfi] = -l; sem_post(&sem_mutual);sem_post(&sem_sit); ) int main()(int i,j,pp,qq; pthread_t t[10];sem_init(&sem_sit,0,5); sem_init(&sem_mutual,0,1);for(i = 0;i < 10;i++)( pp = pthread_create(&t[il,NULL,(void *)reader,(void *)i);if(pp != 0){printf("reader%derror,create again",i);i—;} }for(j = 0;j v ]0;j++){ qq = pthreadJoin(t|j],NULL);if(qq !=()){ printf("reader%d exit fail",j+l);} )return 0; } 5.运行结果与运行情况程序运行结果如下: ZJY@localhost:~/DesktopFile Edit View Search Terminal Help [ZJYQlocalhost Desktop]$ ./zjy readerl readerl reader? reader2 readers readers reader4 reader4 readers readerl readersreaderl reader2 readers reader4 readersEntered, registered. Entered, registered. Entered, registered. Entered, registered. Entered, is reading registered, sitting info is is is is issitting sitting sitting sitting sitting at 1 at 2 at 3 at 4 at 5readerl reader6reader2 reader6readers reader2 reader3 reader4 readers logout and exit Entered. is reading registered, sitting info--- is is is is issitting sitting sitting sitting sitting at 1 at 2 at 3 at 4 at 5reader2 reader? readers reader? logout and exit Entered. is reading registered, sitting info---reader6issittingat1 reader?issittingat2readersissittingat3
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 操作系统相关

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服