课程设计任务书
《操作系统原理》课程设计任务书
设计题目:读者---写者问题
任务下达时间:2006 年 8 月 28 日
任务完成时间:2006 年 9 月 8 日
指导教师:
指导教师评语
一、所得结果:
二、存在问题:
成绩
评阅人
1
一、设计说明:
这里所编写的程序解决的是写者优先问题:一旦一个写者到来,就
尽快对文件进行写操作;如果有读者正在进行读操作,则等待其释放资源。
如果有一个写者在等待,则不允许新到来的读者进行读操作。
二、工作原理:
为做好同步和并发的设计工作,需要将现实问题同经典问题联系起
来,并根据其解决经典问题的能力来测试这些设计,有些问题是设计中的
共同问题并含有极高的数学价值。这些问题比较常见而且重要,其中包括
读者/写者(Readers/Writers)问题。读者——写者问题是经常出现的
一种同步问题,计算机系统中的数据(文件、记录)常被多个进程共享,
但其中某些进程可能只要求读数据(称为 Reader);另一些进程则要求
修改数据(称为 Writer)。就共享数据而言, Reader 和 Writer 是两种
不同类型的进程。一般地,两个或两个以上的 Reader 进程同时访问共享
数据时不会产生副作用,但若某个 Writer 进程和其他进程(Reader 或
Writer)同时访问共享数据时,则可能产生错误,为了避免错误,同时尽
可能地让(Reader)进程和(Writer)进程并发运行,只要保证任何一
个(Writer)进程能与其他进程互斥访问共享数据即可。
三、概要设计:
a.读者优先的附加限制:如果读者申请进行读操作时已有另一个读
者正在进行读操作,则该读者可直接开始读操作。b.写者优先的附加限制:
如果一个读者申请进行读操作时已有另一个写者在等待访问共享资源,则
2
该读者必须等到没有写者处于等待状态后才能开始读操作。c.运行结果显
示要求:要求在每个线程创建、发出读写申请、开始读写操作和结束读写
操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限
制。d.测试数据文件格式:测试数据文件包括 n 行测试数据,分别描述
创建的 n 个线程是读者还是写者,以及读写操作的开始时间和持续时间 。
每行测试数据包括四个字段,每个字段间用空格分隔。(见附带文件
thread.txt)第 1 个字段为正整数,表示线程的序号;第 2 个字段表示线
程的角色(读者还是写者):R 表示读者,W 表示写者;第 3 个字段为一
个正数,表示读写开始时间:线程创建后,延迟相应时间(单位为秒)后
发出对共享资源的读写申请;第 4 个字段为一个正数,表示读写操作的延
迟时间。当线程读写申请成功后,开始对共享资源进行读写操作,该操作
持续相应时间后结束,释放该资源。
四、详细设计
写者优先与读者优先相类似。不同之处在于一旦一个写者到来,它应
该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允
许进行读操作。为此应当填加一个整形变量 writecount,用于记录正在
等待的写者的数目,当 writecount=0 时,才可以释放等待的读者线程
队列。
为了实现写-写互斥,需要增加一个临界区对象 cs_Write。当写者发
出写请求时,必须申请临界区对象的所有权。通过这种方法,可以实现
读-写互斥。
为了对全局变量 writecount 实现互斥,必须增加一个互斥对象
h_Mutex3。
3
评论1