用多线程同步方法解决读者阅览问题.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
武汉理工大学《操作系统概念》课程设计说明书目录 TOC \o "1-2" \h \z \u HYPERLINK \l "_Toc201903823" 1.设计题目与要求 PAGEREF _Toc201903823 \h 2 HYPERLINK \l "_Toc201903824" 2.设计思想及系统平台、语言、工具 PAGEREF _Toc201903824 \h 2 HYPERLINK \l "_Toc201903825" 2.1设计思想 PAGEREF _Toc201903825 \h 2 HYPERLINK \l "_Toc201903826" 2.2.系统平台及工具,环境 PAGEREF _Toc201903826 \h 3 HYPERLINK \l "_Toc201903827" 3.功能与流程图 PAGEREF _Toc201903827 \h 3 HYPERLINK \l "_Toc201903828" 4. 用户名、源程序名、目标程序名和源程序 PAGEREF _Toc201903828 \h 5 HYPERLINK \l "_Toc201903829" 4.1用户名、原程序名、目标程序名 PAGEREF _Toc201903829 \h 5 HYPERLINK \l "_Toc201903830" 4.2源程序如下: PAGEREF _Toc201903830 \h 5 HYPERLINK \l "_Toc201903831" 5.运行结果 PAGEREF _Toc201903831 \h 6 HYPERLINK \l "_Toc201903832" 5.1执行程序 PAGEREF _Toc201903832 \h 6 HYPERLINK \l "_Toc201903833" 5.2运行结果截图:(见下页) PAGEREF _Toc201903833 \h 6 HYPERLINK \l "_Toc201903834" 6.调试记录 PAGEREF _Toc201903834 \h 7 HYPERLINK \l "_Toc201903835" 7.自我评析和总结 PAGEREF _Toc201903835 \h 9 HYPERLINK \l "_Toc201903836" 8.参考文献 PAGEREF _Toc201903836 \h 9用多线程同步方法解决读者阅览问题1.设计题目与要求用多线程同步方法解决读者阅览问题。设阅览室有5把椅子,几把椅子可用连续存储单元。(1)每个读者进入阅览室后,即时显示“Entered” 及其线程标识,还同时显示阅览室共有几名顾客及其所坐的位置。(2)至少有10个读者,每人阅览至少3秒钟。(3)多个读者须共享操作函数代码。2.设计思想及系统平台、语言、工具 2.1设计思想由于我的课程设计中提到了多线程同步问题,于是我查看了线程资料,了解到进程是指在系统中正在运行的一个应用程序,线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元。对于操作系统而言,其调度单元是线程。一个进程至少包括一个线程,通常将该线程称为主线程。一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务。从而理解到我的课程设计所需要的线程数和线程在我的程序中怎么使用。一个人要进去读书就要看有没有座位,也就是说要用信号量。这个人进去了就要修改人数变量和座位变量,由于这些是公共数据,那么就要用到互斥锁,防止别人同时与自己操作同一数据。读书时就要涉及找座位的问题,怎么样识别这个座位有人还是没有人。出来时要释放那些量。这些功能的实现都要通过研究Linux的线程机制,信号量和互斥锁,这样才能实现读者阅览问题 (Reading-Reader Problem )的并发控制。我的程序采用sem(信号量)来控制可以进图书馆的人数,由于只有5张椅子,那么sem初始化为5,这样第6个人想进去就要sem_wait(&sem)即等待别人出来。对数据操作时我就用到了pthread_mutex_lock (&mutex),对数据加锁,防止别人同时进行修改。另外,为了实现进去的人能顺利找到空位,需要一个缓冲区数组buffer[5],把它初始化为全是-1,这样-1就表示这个位子为空位,即buffer[i]==-1,那么i这个位子没有人坐。最后,有人要出来就要修改buffer[i],把它赋值-1,表示空位;还要修改size(图书馆里的人数减少了)。2.2.系统平台及工具,环境本次课程设计是在linux的系统平台下用C语言实现对读者阅览问题的编程,所使用的工具有vi编辑器、gcc编译器等。3.功能与流程图3.1主程序流程图: 3.2读者函

文档评论(0)

新起点 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档