读者写者问题-3-任务书
课程设计任务书

课程设计任务书学生姓名:丁光明专业班级:计算机0506 指导教师:何克右工作单位:计算机科学与技术学院题目: 进程同步模拟设计——司机和售票员问题初始条件:1.预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.模拟公共汽车司机和售票员开关门及行车操作的同步模型。
2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。
时间安排:设计安排一周:周1、周2:完成程序分析及设计。
周2、周3:完成程序调试及测试。
周4、周5:验收、撰写课程设计报告。
(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日题目: 进程同步模拟设计——司机和售票员问题1.初始条件:1.预备内容:阅读操作系统的进程管理章节内容,对进程的同步和互斥,以及信号量机制度有深入的理解。
2.实践准备:掌握一种计算机高级语言的使用。
2要求完成的主要任务:2.1.模拟公共汽车司机和售票员开关门及行车操作的同步模型。
在汽车行驶过程中,司机活动与售票员活动之间的同步关系为:售票员关车门后,向司机发开车信号,司机接到开车信号后启动车辆,在汽车正常行驶过程中售票员售票,到站时司机停车,售票员在车停后开门让乘客上下车。
因此,司机启动车辆的动作必须与售票员关车门的动作取得同步;售票员开车门的动作也必须与司机停车取得同步。
读者-写者问题说明书

《操作系统原理》课程设计任务书题目:读者-写者问题的实现学生姓名:李志旭学号:13740113 班级:_13级软件工程_题目类型:软件工程(R)指导教师:陈文娟、马生菊一、设计目的学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方法并提高解决实际问题的能力。
二、设计任务编写程序实现读者优先和写者优先问题:读者-写者问题的读写操作限制(包括读者优先和写者优先)写-写互斥:不能有两个写者同时进行写操作读-写互斥:不能同时有一个线程在读,而另一个线程在写。
读-读允许:可以有一个或多个读者在读。
三、设计要求1.分析设计要求,给出解决方案(要说明设计实现所用的原理、采用的数据结构)。
2.设计合适的测试用例,对得到的运行结果要有分析。
3.设计中遇到的问题,设计的心得体会。
4.文档:课程设计打印文档每个学生一份,并装在统一的资料袋中,资料袋前面要贴有学校统一的资料袋封面。
四、提交的成果1. 课程设计说明书内容包括(1) 封面(学院统一印制);(2) 课程设计任务书;(3) 中文摘要150字;关键词3-5个;(4) 目录;(5) 正文;(设计思想;各模块的伪码算法;函数的调用关系图;测试结果等)(6) 设计总结;(7) 参考文献;(8) 致谢等。
注:每一部分是单独的一章,要另起一页写。
2. 排版要求(1) 所有一级标题为宋体三号加粗(即上面写的2~8部分,单独一行,居中)(2) 所有二级标题为宋体四号加粗(左对齐)(3) 所有三级标题为宋体小四加粗(左对齐)(4) 除标题外所有正文为宋体小四,行间距为固定值22磅,每个段落首行缩进2字符(5) 目录只显示3级标题,目录的最后一项是无序号的“参考文献资料”。
3. 其他要求(班长负责,务必按照以下方式建文件夹)(1) 以班级为单位刻录光盘一张,光盘以班级命名,例如:“10级计算机科学与技术1班”;(2) 光盘内每人一个文件夹,以学号姓名命名——如“10730101 陈映霞”,内容包括任务书、设计文档。
读者写者问题共52页

•
30、风俗可以造就法律,也可以废除 法律。 ——塞·约翰逊
读者写者问题
6、最大的骄傲于最大的自卑都表示心灵的最软弱无力。——斯宾诺莎 7、自知之明是最难得的知识。——西班牙 8、勇气通往天堂,怯懦通往地狱。——塞内加 9、有时候读书是一种巧妙地避开思考的方法。——赫尔普斯 10、阅读一切好书如同和过去最杰出的人谈话。——笛卡儿
•
26、我们像鹰一样,生来就是自由的 ,但是 为了生 存,我 们不得 不为自 己编织 一个笼 子,然 后把自 己关在 里面。 ——博 莱索
•
27、法律如果不讲道理,即使延续时 间再长 ,也还 是没有 制约力 的。— —爱·科 克
•
28、好法律是由坏风俗创造出来的。 ——马 克罗维 乌斯
•
29、在一切能够接受法律支配的人类 的状态 中,哪 里没有 法律, 那里就 没有自 由。— —洛克
Thank you
ห้องสมุดไป่ตู้
中国当代文学专题形考任务3

中国当代文学专题形考任务3
任务3:针对中国当代文学作品进行评析
评析范例一:《活着》
《活着》是中国作家余华的代表作,通过讲述一个普通农民的命运,展现了当代中国社会中人们面临的种种困境和生存的挣扎。
作品以一个农民的视角,揭示了中国历史上许多重要事件对普通人民所带来的巨大冲击。
首先,作品以细腻的文字描写和丰富的细节展示了主人公福贵的生活遭遇,使读者能够深入感受到他的苦难和悲伤。
他被迫看着儿子去战争,无助地目睹妻子被卖给豪门,从一个富有的村庄主人变成了一无所有的穷光蛋。
这些描写使读者更能够与主人公产生共鸣,引发对社会现实的反思。
其次,作品通过展示社会历史变迁和制度的种种暴行,批判了社会不平等和人性的丑陋。
作者通过借用历史事件,如大跃进和文化大革命等,以及主人公所经历的苦难来说明这些问题。
通过对社会和制度的控诉,作者试图唤醒读者对社会的关注,并推动社会进步。
最后,作品通过主人公福贵的坚韧和乐观态度,传递了生命的意义和力量。
尽管主人公生活经历了一系列的不幸和磨难,但他依然坚持活着,并为了生存不断奋斗。
这种乐观的生活态度给予了读者希望和勇气,让人们意识到人生的价值和意义。
综上所述,《活着》通过其细腻的描写、批判社会不平等和人性的丑陋以及传递生命的力量,成为中国当代文学的经典之作。
它折射出了中国社会的现实和人们的生存状态,引发了对社会问题的反思和关注。
同时,它也传达了人生的价值和意义,给予了人们希望和勇气。
读者写者问题描述

读者写者问题描述嘿,你问读者写者问题啊?那我给你讲讲哈。
咱就说啊,这读者写者问题呢,就好比一个图书馆。
有很多人想去看书,这就是读者。
还有人想去写书,那就是写者。
有一回啊,我去图书馆。
那里面好多人都在安静地看书呢。
这时候就相当于有很多读者在享受知识。
突然,有个作家模样的人来了,他想找个地方坐下来写书。
这就是写者出现了。
这时候问题就来了。
如果读者和写者同时在图书馆里,会咋样呢?如果读者一直在看书,写者就没办法好好写书,因为他会觉得被打扰了。
反过来,如果写者一直在写书,读者也没办法好好看书,因为他们不知道啥时候能看到新的内容。
就像我在图书馆里,我正看得入迷呢,突然那个作家开始大声地思考他的情节,哎呀,那可把我烦死了。
我就想,你能不能安静点啊,让我好好看书嘛。
这就像读者希望写者不要打扰他们一样。
那怎么办呢?就得有个规则。
比如说,让写者先等读者都看完书走了,他再开始写书。
或者让读者在写者写书的时候,稍微安静一点,不要弄出太大动静。
我记得有一次,我在图书馆里,有个写者特别有礼貌。
他进来的时候,看到很多读者,就悄悄地找了个角落坐下,等大家都看得差不多了,他才开始动笔。
这样大家都能和谐共处了。
读者写者问题就是要找到一个平衡,让读者能愉快地看书,写者也能安心地写书。
不能让一方太强势,影响了另一方。
就像在生活中,我们也会遇到类似的情况。
比如说,一个办公室里,有人在安静地工作,有人在讨论问题。
这时候就得互相体谅,不能太吵了,影响别人工作。
总之啊,读者写者问题就是要解决大家在共享资源的时候,如何和谐相处的问题。
嘿嘿,你明白了不?。
读者写者问题

3)读读允许,即可以有2个以上的读者同时读
将所有的读者与所有的写者分别放进两个等待队列中,当读允许时就让读者队列释放一个或多个读者,当写允许时,释放第一个写者操作。读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以就是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)与一些只往数据区写数据的进程(Writer),此外还需要满足以下条件:1)任意多个读进程可以同时读这个文件;2)一次只有一个写进程可以往文件中写;3)如果一个写进程正在进行操作,禁止任何读进程度文件。我们需要分两种情况实现该问题:
一设计概述
所谓读者写者问题,就是指保证一个writer进程必须与其她进程互斥地访问共享对象的同步问题。
读者写者问题可以这样的描述,有一群写者与一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但就是,只能有一个写者在写书,并且,读者必写者优先,也就就是说,读者与写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前就是否可操作。
信号量机制就是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者问题则就是这一机制的一个经典范例。
与记录型信号量解决读者—写者问题不同,信号量机制它增加了一个限制,即最多允许RN个读者同时读。为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1个读者要进入读时,必然会因wait(L,1,1)操作失败而堵塞。对利用信号量来解决读者—写者问题的描述如下:
读者写者问题实验报告
实验二:读者写者问题一、实验要求在Windows 环境下,创建一个控制台进程,此进程包含n个线程。
用这n 个线程来表示n个读者或写者。
每个线程按相应测试数据文件的要求进行读写操作。
用信号量机制分别实现读者优先和写者优先的读者-写者问题。
读者-写者问题的读写操作限制(包括读者优先和写者优先):1、写-写互斥,即不能有两个写者同时进行写操作。
2、读-写互斥,即不能同时有一个线程在读,而另一个线程在写。
3、读-读允许,即可以有一个或多个读者在读。
读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。
写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态才能开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读写操作和结果读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。
流程图如图1、图2、图3、图4所示。
图1 流程图1图2 流程图2图3 流程图3图4 流程图4二、测试数据文件格式测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。
每行测试数据包括四个字段,各个字段间用空格分隔。
第一字段为一个正整数,表示线程序号。
第二字段表示相应线程角色,R表示读者,W表示写者。
第三字段为一个正数,表示读写操作的开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。
第四字段为一个正数,表示读写操作的持续时间。
当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。
下面是一个测试数据文件的例子:1 R 3 52 W 4 53 R 5 24 R 6 55 W 5.1 3三、实验结果1、初始化界面2、读者优先3、写者优先。
读者按试题及答案
读者按试题及答案读者按试题及答案是一种常见的教学和学习工具,它通常包含一系列问题和相应的答案,旨在帮助读者检验对特定主题或材料的理解。
以下是对这种试题及答案形式的详细介绍和分析。
# 一、读者按试题的类型1. 选择题:包含一个问题和多个选项,其中只有一个是正确答案。
2. 填空题:要求读者填写缺失的单词或短语,以完成句子或段落。
3. 简答题:要求读者用简短的句子回答一个问题。
4. 论述题:要求读者提供详细的解释或论证,通常需要多段文字。
5. 案例分析题:提供具体的情境或案例,要求读者分析并给出解决方案。
# 二、读者按试题的设计原则1. 针对性:试题应针对特定的学习目标或教学内容。
2. 层次性:试题应涵盖不同难度层次,以适应不同水平的读者。
3. 多样性:试题类型应多样化,以激发读者的兴趣和参与度。
4. 准确性:问题和答案都应准确无误,避免误导读者。
# 三、读者按试题的编写步骤1. 确定目标:明确试题要达到的教学目标或评估目的。
2. 选择材料:根据教学内容选择适当的阅读材料或案例。
3. 设计问题:根据材料设计问题,确保问题覆盖材料的关键点。
4. 制定答案:为每个问题提供准确、清晰的标准答案。
5. 审校和测试:对试题进行审校,确保无误,并进行小范围测试以评估其有效性。
# 四、读者按试题的使用策略1. 自学检验:读者可以通过完成试题来检验自己的学习成果。
2. 课堂互动:教师可以在课堂上使用这些试题来促进学生之间的讨论。
3. 评估工具:教师可以使用这些试题作为评估学生理解程度的工具。
4. 反馈机制:通过分析学生的答案,教师可以了解学生的理解情况,并据此调整教学策略。
# 五、读者按试题的评估标准1. 准确性:答案是否与教学内容和材料相符。
2. 完整性:答案是否全面覆盖了问题的所有要点。
3. 逻辑性:答案是否条理清晰,逻辑合理。
4. 创新性:答案是否展现了学生的独特见解或创造性思维。
# 六、读者按试题的改进建议1. 定期更新:随着教学内容的更新,试题也应定期进行修订。
50至70年代文学中的读者问题
就未 免太过粗 率 , 未免夸 大国 诚、 王本朝 等学 者未 加研 究 , 对读 者权 力 的跃升 , 们 得 规约功能吗?倘这样想 , 但 他
成为人民的要求 ” 同时又据 意识形态 的需 要“ 理论 上 , 从
虚构了一种理想化 的读 者” 如 此一 来 , , 读者即挟“ 人民的 要求” 以号令 文坛 , 则借之 对作 家实行 规 训 , 文学 生 党 使
圣功能的“ 众” “ 群 、 人民 ” 并获得 了 巨量权 威 意识形 态 , 资源 。但披上了“ 众” 辞外衣 , 者就真 的能突 然获 群 修 读 家意识形态力量 。其 实 , 建 国初期 , 在 自由主义作 家 ( 如 攻讦过中国共产党的 朱光潜 ) 对 “ 众” 或 群 有所 “ 敏”, 过 但延安文人却未 必真 以为然 , 尽管 他们 大都发 表过 欢迎
据现有材料 , 可判断 当代文学接受 制度 的形 成 , 是在 文学版 图重 构最 为激 烈 的 15 9 0至 15 9 3年 。对 此 , 子 洪 皆有注意 。那么 , 种 “ 这 跃升 ” 怎样 出现 的?论 者都 解 是 释为因意识形态修 辞所致 。王本朝 称 ,99年后 党将 读 14 者命名为意识形态化 的“ 群众” “ 、 人民 ” 使 “ 者 的需求 , 读
艺报》 褒贬 作家 , , 结果 , 赞扬和 请教性 “ 来信 ” 登 出来 , 被 批 评信却石沉大 海 , 写信 者甚至遭 到冷 嘲热 讽。据后 来 披露 的材料 ,文艺 报》 《 经常 “ 把读 者意 见对 作者 封锁起
工农群众读 者则 因其 阶级 的绝对先进 而担
负 了一种说教 和 规训 的功 能 , 然而 其工 农群 众
之 转换 为规 范 、 制文 学 的工具 。此 种论 点误解 甚 多。其 实 , 时期读 者 凸显 的动 因与政 治控 制无关 ; 意识 形态 控 此 不是 修 辞 , 主要 是特 殊 的接受 制度 的建 构 , 给 了读 者超 强接 受权 力 ; 知识 分子 与 大众 对接 受权 力的 觊觎 与 争夺 , 而 赋 而 又 成 为读 者朝 向政 党/ 人势 力控 制 工具沦落 的 重要导 因 。 私 关键词 : 读者 ; 制度 ; 治控 制 ; 力斗 争 文学 接受 政 势
读者-写者问题代码解释
读者-写者问题有同学反映“读者-写者问题”的代码比较难理解。
主要是因为Windows提供了一种互斥机制称为“Critical Section”,中文翻译为“临界区”,这个名字具有迷惑性,因为,它容易与我们课本上讲的“临界区”的概念混淆。
课本上临界区指“对临界资源进行访问的代码”;而这种称为“Critical Section”互斥机制,并不是这个意思,而是访问临界区之前的一种加锁机制,与Mutex 信号量的作用类似,只是“Critical Section”互斥机制只能在同一进程内部各个线程间使用,而Mutex互斥机制是可以跨进程使用的。
为帮助大家更容易理解读者-写者的代码,下面的代码用Mutex互斥机制替换了“Critical Section”互斥机制,并添加了部分注释,并用蓝色标注,其原理都是一样的。
#include "windows.h"#include "process.h"#include <conio.h>#include <stdlib.h>#include <fstream.h>#include <io.h>#include <string.h>#include <stdio.h>#define READER 'R' // 读者#define WRITER 'W' // 写者#define INTE_PER_SEC 1000 // 每秒时钟中断数目#define MAX_THREAD_NUM 64 // 最大线程数目#define MAX_FILE_NUM 32 // 最大数据文件数目#define MAX_STR_LEN 32 // 字符串长度volatile int readcount = 0; // 读者数目HANDLE RP_Write;struct ThreadInfo // 定义线程数据结构{int serial; // 线程序号char entity; // 线程类别(判断是读者线程还是写者线程)double delay; // 线程延迟double persist; // 线程读写操作持续时间};/////////////////////////////////////////////////////////////////////////// 读者优先——读者线程/// p:读者线程信息unsigned int __stdcall RP_ReaderThread(void *p){// 互斥变量HANDLE h_Mutex;h_Mutex = OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex_for_readcount");DWORD wait_for_mutex; //等待互斥变量所有权DWORD m_delay; //延迟时间DWORD m_persist; //读文件持续时间int m_serial; //线程序号//从参数中获得信息m_serial = ((ThreadInfo *)(p))->serial;m_delay = (DWORD)(((ThreadInfo *)(p))->delay*INTE_PER_SEC);m_persist = (DWORD)(((ThreadInfo*)(p))->persist*INTE_PER_SEC);Sleep (m_delay) ; //延迟等待printf("Reader thread %d sents the reading require......\n",m_serial);//等待互斥信号,保证对readcount的访问、修改互斥wait_for_mutex = WaitForSingleObject(h_Mutex,-1);// 读者数目增加readcount++;if(readcount ==1){//这是第一个读者,第二个读者到来时,readcount为2,if的条件不满足,不会进入if语句内部执行//这是第一个读者,如果此刻没有写者正在写,则RP_Write信号量状态为可用(未占用),那它就必须先占用(锁定)RP_Write信号量,这就实现了读-写互斥//如果此刻有写者正在写,则RP_Write信号量被写者占用(锁定),读者想对RP_Write加锁就会阻塞在此,等待RP_Write信号量释放后,才能继续运行WaitForSingleObject(RP_Write, INFINITE);}ReleaseMutex(h_Mutex) ; //释放互斥信号// 读文件printf("Reader thread %d begins to read file.\n",m_serial);Sleep(m_persist) ;// 退出线程printf("Reader thread %d finished reading file.\n",m_serial);//等待互斥信号,保证对readcount的访问、修改互斥wait_for_mutex = WaitForSingleObject(h_Mutex,-1) ;//读者数目减少readcount-- ;if(readcount == 0){//如果所有读者读完,则释放RP_Write信号量;此刻若有写者正在等待(处于阻塞状态),将(自动)唤醒写者ReleaseMutex(RP_Write);}ReleaseMutex(h_Mutex) ; //释放互斥信号return 0;}////////////////////////////////////////////////////////////////////////// 读者优先——写者线程// p:写者线程信息unsigned int __stdcall RP_WriterThread(void* p){DWORD m_delay; //延迟时间DWORD m_persist; //写文件持续时间int m_serial; //线程序号//从参数中获得信息m_serial = ((ThreadInfo *)(p))->serial;m_delay = (DWORD)(((ThreadInfo *)(p))->delay*INTE_PER_SEC) ;m_persist = (DWORD)(((ThreadInfo *)(p))->persist*INTE_PER_SEC) ;Sleep (m_delay); //延迟等待printf("Writer thread %d sents the writing require.\n",m_serial);// 写者在进行写数据之前,必须确定没有其它写者正在写,也没有其它读者在读,// 通过RP_Write互斥量实现,若有其它写者正在写或其它读者在读,则该写者调用“WaitForSingleObject(RP_Write, INFINITE);”后将阻塞在此// 等待RP_Write信号量释放后,才能够继续向下执行。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统原理课程设计任务书
学院名称:数学与计算机学院课程代码:_8404061_
专业:年级:
一、设计题目
读者写者问题
二、主要内容
编写程序解决读者写者问题,并测试。
三、具体要求及应提交的材料
在Windows2000环境下,创建一个控制台进程,此进程包含n个线程。
用这n个线程来表示n个读者或写者。
每个线程按相应测试数据文件(后面介绍)的要求进行读写操作。
用信号量机制分别实现读者优先和写者优先问题。
读者-写者问题的读写操作限制(包括读者优先和写者优先)
1)写-写互斥:不能有两个写者同时进行写操作
2)读-写互斥:不能同时有一个线程在读,而另一个线程在写。
3)读-读允许:可以有一个或多个读者在读。
读者优先的附加限制:如果读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。
写者优先的附加限制:如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。
运行结果显示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。
测试数据文件格式:
测试数据文件包括 n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。
每行测试数据包括四个字段,每个字段间用空格分隔。
第1个字段为正整数,表示线程的序号。
第2个字段表示线程的角色,R表示读者,W表示写者。
第3个字段为一个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后发出对共享资源的读写申请。
第4个字段为一个正数,表示读写操作的延迟时间。
当线程读写申请成功后,开始对共享资源进行读写操作,该操作持续相应时间后结束,释放该资源。
下面是一个测试数据文件的例子(在记事本手工录入数据):
1 R 3 5
2 W 4 5
3 R 5 2
4 R 6 5
5 W 5.1 3
课程设计分析:
可以将所有读者和所有写者分别存于一个读者等待队列和一个写者等待队列中,每当读允许时,就从读者队列中释放一个或多个读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者线程进行写操作。
1.读者优先:
读者优先指的是除非有写者在写文件,否则读者不需要等待。
所以可以用一个整数变量Read_count记录当前的读者数目,用于确定是否需要释放正在等待的写者进程(当Read_count=0时,表明所有的读者读完,需要释放写者等待队列中的一个写者)。
每当一个读者开始读文件时,必须修改Read_count变量。
因此需要一个互斥对象mutex来实现对全局变量Read_count修改时的互斥。
另外,为了实现写-写互斥,需要增加一个临界区对象Write。
当写者发出写请求时,必须申请临界区对象的所有权。
通过这种方法,可以实现读-写互斥,当Read_count=1时(即第一个读者到来时),读者线程也必须申请临界区对象的所有权。
当读者拥有临界区的所有权时,写者阻塞在临界区对象Write上。
当写者拥有临界区的所有权时,第一个读者判断完”Read_count==1”后阻塞在Write上,其
余的读者由于等待对Read_count的判断,阻塞在mutex上。
2.写者优先:
写者优先与读者优先相类似。
不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作。
为此应当填加一个整形变量Write_count,用于记录正在等待的写者的数目,当Write_count=0时,才可以释放等待的读者线程队列。
为了对全局变量Write_count实现互斥,必须增加一个互斥对象mutex3。
为了实现写者优先,应当填加一个临界区对象read,当有写者在写文件或等待时,读者必须阻塞在read上。
读者线程除了要对全局变量Read_count实现操作上的互斥外,还必须有一个互斥对象对阻塞read这一过程实现互斥。
这两个互斥对象分别命名为mutex1,mutex2。
相关WindowsAPI说明:(请同学们参考MSDN)
1.CreateThread: 创建一个在调用进程的地址空间中执行的线程。
2.ExitThread
3.Sleep: 对指定的时间间隔挂起当前的执行线程
4.CreateMutex: 创建有名或者无名的互斥对象
5.ReleaseMutex:
6.WaitForSingleObject: 当发生(1)指定对象处于信号态(2)超时则该函
数返回
7.WaitForMultipleObject: 任意一个或全部指定对象处于信号态或超时
间隔已过时,返回
8.CreateSemapore: 创建一个有名或无名信号对象。
9.ReleaseSemapore:
10.InitializeCriticalSection: 初始化临界区对象
11.EnterCriticalSection: 等待指定临界区对象的所有权。
当调用线程被
赋予所有权时,返回。
LeaveCriticalSection:该函数释放指定临界区对象的所有权。
课程设计要求:
1.分析设计要求,给出解决方案(要说明设计实现所用的原理,采用的数
据结构);
2.画出程序的基本结构框图和流程图;
3.对程序的每一部分要有详细的设计分析说明;
4.程序执行的每个步骤要有具体的提示内容或输出;
5.源代码格式规范,注释不少于三分之一;
6.设计合适的测试用例,对得到的运行结果要有分析;
7.设计中遇到的问题,设计的心得体会。
设计结束后,每位同学必须上交如下材料:
1.《课程设计说明书》打印稿一份;
2.《课程设计说明书》电子文档及课程设计的程序源代码刻盘
四、主要技术路线提示
首先选择自己熟悉的程序设计语言,然后分析问题,画出流程图,再进行详细编码,实现相应的功能。
最后要对软件进行测试。
五、进度安排
共计2周时间,20个机时,建议进度安排如下:
1. 选题和需求分析2学时
2. 查阅资料(图书、期刊资料或上网查阅相关资料) 2学时
3. 构造框架(系统结构设计) 1.5学时
4. 编程上机,调试9学时
5. 现场验收(根据程序提问)0.5学时
6. 书写课程设计报告5学时
当然,仅靠课内时间是不够的,希望同学们课外多花时间编程学习。
六、推荐参考资料(不少于3篇)
1.张尧学等编著. 计算机操作系统教程.北京:清华大学出版社,2006.02 2.汤子瀛等编著.计算机操作系统.西安:西安电子科技出版社,1996.12 3.陈向群编著.操作系统教程.北京:北京大学出版社,2007.01
4.罗宇等编著.操作系统课程设计.北京:机械工业出版社,2005.9
指导教师签名日期年月日
系主任审核日期年月日。