Reader Writer Questions 乘法口算100题七年级有理数混合运算100题系统课程设计设计题目:Reader Writer题系:计算机科学专业:计算机科学与技术组:第四组学生姓名:XX学生证:开始和结束日期: 讲师:目录TOC\o"1-3"\h\uHYPERLINK\l_Toc12071、需求分析1HYPERLINK\l_Toc15876课程设计主题1HYPERLINK\l_Toc4909课程任务和要求1HYPERLINK\l_Toc28656课程设计理念1HYPERLINK\l_Toc26274软件和硬件操作环境和开发工具2 \l_Toc139662、@ >outline design General Application of Writer's Problem 13HYPERLINK\l_Toc54817、Reference 131、需求分析课程设计题目课程设计题目:Reader Writer Problem Course Tasks and Requirements to Write Programs to implement Reader Writer Algorithms (read_write 互斥,read_read 允许,write 和 write mutua lly独家)给出解决方案施工方案施工方案示例结构施工方案营销策划方案模板施工组织设计(施工方案)(包括说明设计实现原理、使用的数据结构等)绘制程序基础结构块图表和流程图分析 讲解程序各部分的设计思路 实现源代码 按时提交完整的程序代码和可执行程序 按要求完成课程设计报告 总结课程设计思路 读写器问题是经典并发编程问题。
有两组并发进程:readers和writers,共享文件F,要求:(1)允许多个reader同时对文件进行读操作;(2)只允许一个写者对文件执行写操作;(3)任何写者在写操作完成之前不允许其他读者或写者工作;(4)写者在执行之前应该让已有的写者和读者一个写操作全部退出,单纯使用信号量是解决不了这个问题的,必须引入计数器readcount来统计读过程,为了有效解决读写器问题,需要引入读写锁,允许多个读者同时以只读方式存储。取一个受锁保护的对象;或者一个写者通过写访问一个受锁保护的对象。当一个或多个读者被锁定时,此时形成一个读锁,并且writer 将无法访问受锁保护的对象。 ;当请求者使用锁进行写操作,形成写锁,其他进程的读写操作必须等待。软硬件运行环境及开发工具 本课程是在windows操作系统下设计的,使用java语言完成。2、@>设计程序流程图总结 本系统主要有读者和作者两类对象,所以该系统主要针对这两类对象的操作。 reader 类对象流程图如下: 图 reader 类对象 writer 类对象流程 图如下: 图 writer 类对象使用原理 并发原理 进程并发是指执行一组过程在时间上重叠。所谓时间重叠是指一个进程执行第一条指令,直到另一个进程执行最后一条。它在指令之前开始。并发的本质是多个进程间处理器的多路复用,并发是强制多用户共享有限的物理资源,消除计算机组件之间相互对等的现象,提高系统资源的利用率。速度。并发进程可能是不相关的或交互的。必须控制过程的相互作用,否则会出现不正确的计算结果。互斥操作原理 互斥是指几个进程相互竞争独占资源。竞争限制关系产生。并发进程中与共享变量相关的程序段称为“临界区”,共享变量所代表的资源称为“临界资源”,临界区相对于其他进程必须互斥。执行方式。如果一个过程可以保证
在执行临界区时,不允许另一个进程进入同一个临界区,即每个进程对共享变量的访问是互斥的,所以不会引起时间相关的错误。为了正确有效地使用临界资源,共享变量的并发进程应该遵循临界区调度的三个原则:最多一个进程进入临界区执行;其他进程应该等待;进入临界区的进程应该在有限的时间内退出,以允许等待队列中的进程之一进入。总结起来就是三句话:互斥使用,有空就进来;忙时等,有限地等待;如果你选择一个,该算法是可行的。面向对象编程的编程原理 面向对象是一种新的编程方法 双积分计算法 84消毒比法 愚人节全人法 一种新的编程范式,其基本思想是使用对象、类、继承、封装和设计程序的消息。它从现实世界中客观存在的事物(即对象)构建软件系统,在系统构建中尽可能使用人类自然的思维方式,强调直接思考问题中的事物领域(现实世界)为中心问题,识别问题,并根据系统的本质特征将这些事物抽象为系统中的对象,作为系统的基本构成单元(而不是使用一些关系较远的事物)与现实世界中的事物没有对应关系)其他概念来构建系统)。
这允许系统直接映射问题域,将事物及其相互关系保持在问题域中。本课程的设计涉及两个对象,因此使用面向对象的语言进行编程是合适的。这次我们使用了Java语言。锁机制原理为了解决读写器之间的同步和互斥问题,本课程的设计中使用了Java中的锁机制,这将给编程带来极大的方便。多线程同步的实现最终依赖于锁定机制。我们可以想象一个共享资源是一个房间,每个人都是一个线程。当A想进入房间时,他必须得到门锁。 A拿到门锁后,进门后马上锁门,所以B、C、D……只好在门外等到A松开锁出来,B、C、D……某个人抢锁(具体的抢方法取决于JVM的实现,可以先到先得,也可以随机选择),然后进屋锁门。这样,任何时候最多只有一个人在家里(使用共享资源)。 Java语言规范波梁钢护栏操作流程规范建筑工程验收规范护理文书写作规范医疗保健文书写作规范内置支持多线程。对于 Java 程序读者写者问题流程图,每个对象实例都有一个“锁”。一旦一个线程获得了锁,如果其他线程想要获得锁,就只能等待该线程释放锁。获得锁只有一种方法,那就是 synchronized 关键字。 1、使用锁操作原语实现互斥 为了解决进程进入临界区的互斥问题,可以为每种临界区设置一个锁。锁有两种状态:打开和关闭。执行临界区程序的进程的操作如下 进行的步骤: ①关闭锁。
先检查锁的状态,如果是关闭的,则等待它被打开;如果已经打开,关闭它并继续步骤②的操作。 ② 执行临界区程序。 ③ 解锁。打开锁并退出临界区。 2、WAIT、NOTIFY、NOTIFYALL操作原语信号量的初始值可以由系统根据资源情况和使用需要来确定。在初始条件下,信号量的指针入口可以设置为0,表示队列为空。信号量的值在使用过程中是可变的,但只能通过 WAIT 和 SIGNAL 操作来改变。设信号量为S,对S的WAIT操作记为WAIT(S),对它的SIGNAL操作记为SIGNAL(S)。 WAIT(S):依次执行以下两个动作: 1) 信号量的值减1,即S=S-1; 2) 如果S≥0,则流程继续执行;如果S<0,则将进程的状态设置为阻塞状态,将对应的WAITCB连接到信号量队列的末尾,放弃处理器等待(直到其他进程对S执行SIGNAL操作并释放它)。 SIGNAL(S):依次执行以下两个动作的原理线程是进程中的一个实体,一个进程可以有多个线程,一个线程必须有父进程。一个线程不拥有系统资源,只有一些运行所必需的数据结构;它与父进程的其他线程共享该进程拥有的所有资源。线程可以创建和取消线程,实现程序的并发执行。一般来说,一个线程具有三种基本状态:就绪、阻塞和运行。读写器问题的一般应用 读写器是一个典型的并发编程问题
问题,它的方法可以广泛应用于多线程同步和互斥问题,很好的解决了共享资源的问题,让事情在并发上更加高效,类似的问题还有生产者-消费者的问题,理发师问题等等。 3、详细设计本课程的设计是用java语言编写的,所以用到了类,包括reader类和writer类,都是继承线程Thread类,在主程序中创建类对象(reader类) 对象和写入器对象),使用线程来实现并发读取器类对象和写入器类对象。公共属性包括:privatestaticfinalintNAP_TIME=5;privateintreaderCount;privateintwriterCount;privatebooleandbReading;privatebooleandbWriting; NAP_TIME用于调整线程的随机休息时间,由readercount和writercount记录不腐谈话记录、退出采访记录、安全生产月会如何写会议记录、幼儿园餐委会议记录、安全例会记录判断writercount >0实现读写互斥,同时允许读写同步;而 writer 则依靠判断 dbreading=true||dbwriting=true 来实现读写互斥和读写互斥。
等待读写是随机的,使用了()函数。程序代码如下: classDatabase{/*读写器共享资源数据库类*/privatestaticfinalintNAP_TIME=5;privateintreaderCount;/*记录当前阅读器数量*/privateintwriterCount;/*记录当前编写器数量*/privatebooleandbReading ;/*显示读者是否在读*/privatebooleandbWriting;/*显示作者是否在写*/publicDatabase(){/*Constructor*/super();readerCount=0;writerCount=0;dbReading=false;dbWriting= false;Count="+readerCount);returnreaderCount;}publicsynchronizedvoidstartWriting(){++writerCount;while(dbReading==true||dbWriting==true){/ *如果读取器正在读取或写入器正在写入,写入器将wait*/try{"Writeriswaiting");wait();}catch(Exceptione){}}dbWriting=true;/*一个 writer 正在写,然后设置写状态为 true*/}publicsynchronizedvoidendWriting(){--writerCount ;/*由于一次只有一个writer在写,所以写操作完成后writer的个数必须为0*/dbWriting=false;/* I f 没有写入器写入,设置写入状态为false*/"onewriterisdonewriting.Count="+writerCount);notifyAll();/*释放所有等待线程*/}}classReaderextendsThread{/*创建读取器类*/privateDatabaseserver ;privateintreaderNum ;publicReader(intr,Databasedb){super();readerNum=r;server=db;}publicvoidrun(){intc;while(true){"reader"+readerNum+"issleeping");();"reader" +readerNum+ "想要存储");c=();"reader"+readerNum+"isreading.Co
unt="+c);();c=();"Itisreader"+readerNum+"whohasdonereadingaccordingtocount="+c);}}}classWriterextendsThread{/*创建写入器类*/privateDatabaseserver;privateintwriterNum;publicWriter( intw,Databasedb){super();writerNum=w;server=db;}publicvoidrun(){while(true){"Writer"+writerNum+"issleeping");();"Writer"+writerNum+"wantstowrite"); ();"Writer"+writerNum+"正在写作");();();"ItisWriter"+writerNum+"whohasdonewriting.");}}}publicclassDatabaseServer{publicDatabaseServer(){super();}publicstaticvoidmain(String[]args ){Databasedb=newDatabase();/*创建四个reader对象和两个writer对象*/Readerr1=newReader(1,db);Readerr2=newReader(2,db);Readerr3=newReader(3,db);Readerr4=newReader (4,db);Writerw1=newWriter(1,db);Writerw2=newWriter(2,db);();();();();();();}}4、调试以及操作说明 由于读写等待是随机的,可能有多种情况,读写的顺序也可能不同,以下是几种不同的操作结果s:图reader writer results 1 上图中的结果:按照reader1、reader2、@>reader3、writer1、reader4、writer2的顺序输入。 ..最终的执行结果会按照writer1、Writer2、@>Reader2、@>4、3、1…的顺序排列。
图reader writer result 2 上图中的结果说明:按reader1、reader3、reader2、@>writer 1...的顺序输入,最终执行结果是按照读者3、Readers1、Writers 2…的顺序。 5、课程设计总结与心得经过集体努力,本次课程设计基本可以完成功能,read_write互斥,read_read权限,写和写互斥都可以实现,但是还是有一些不足的,比如是不可能达到读者优先或写者优先,可能要等很久。本次课程设计完成后读者写者问题流程图,我们将继续努力完善功能。这次我们的收获是了解了使用Java等面向对象语言来实现线程同步和互斥的问题,并且了解了Java中的锁机制,对以后的编程和进一步的有很大的帮助。加深了对此类问题的系统理解。 6、致谢感谢这学期来找我们的老师教我们,让我们对操作系统有了一个全面的了解,对我们以后的学习有很大的帮助。对于本次课程设计,老师也给予了我们充分的支持和理解,是您对我们的指导,帮助我们顺利完成了本次课程设计。 7、参考文献 [1] 费祥林,罗斌。操作系统教程 ("\t"_blank) (第 4 版) [M].北京:高等教育出版社,2009. [2]李尊超,苏军.Java语言程序设计(第二版)[M].中国铁道出版社, 200 8. 指导员评语: 指导员签名: 年、月、日、等级、权重和项目等级1、设计过程中考勤、学习态度等方面2、@ >设计技术水平3、安全水平和可操作性4、设计报告书写和绘图规范水平总分教研室评审意见:教研室主任签字:年、月、日、师范学院(部门)审核意见:主任签字:年月日CTRL+A选择所有可调整字体属性和字体大小-CAL-FENGHAI.NetworkInformationTechnologyCompany.2020YEAR