读者写者问题的实现说明书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

*******************

实践教学

*******************

兰州理工大学

计算机与通信学院

2014年秋季学期

操作系统原理课程设计

题目:读者-写者问题的实现

专业班级:计算机科学与技术1班

姓名:王喆

学号:12240102

指导教师:王旭阳

成绩:

读者写者问题,是指保证一个writer进程必须与其他进程互斥地访问共享对象的同步问题。

读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个写者在写书,并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量S来当前是否可操作。

信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者则是这一机制的一个经典范例。

与记录型信号量解决读者—写者问题不同,信号量机制它增加了一个限制,即最多允许RN个读者同时读。为此,又引入了一个信号量L,并赋予初值为RN,通过执行wait(L,1,1)操作,来控制读者的数目,每当有一个读者进入时,就要执行wait(L,1,1)操作,使L的值减1。当有RN个读者进入读后,L便减为0,第RN+1 个读者要进入读时,必然会因wait(L,1,1)操作失败而堵塞。

关键字:读者优先、写者优先、线程、互斥、信号量。

摘要 (2)

正文 (1)

1、课程简介............................................. 错误!未定义书签。

1.1课程设计任务描述................................ 错误!未定义书签。

1.2设计思想........................................ 错误!未定义书签。

1.3合作团队........................................ 错误!未定义书签。

2、算法与数据结构....................................... 错误!未定义书签。

3、功能模块描述......................................... 错误!未定义书签。

4、测试及运行结果....................................... 错误!未定义书签。心得体会.................................................... 错误!未定义书签。参考文献.................................................... 错误!未定义书签。致谢........................................................ 错误!未定义书签。源代码...................................................... 错误!未定义书签。

1.设计思想

本设计借助C语言实现进程同步和互斥的经典问题--读者写者问题,用高级语言编写和调试一个进程同步程序,以加深对进程同步机制的理解。通过用C语言模拟进程同步实现,加深理解有关进程同步和互斥机制的概念及P、V操作的应用。学生通过该题目的设计过程,掌握读者、写者问题的原理、软件开发方法并提高解决实际问题的能力。

在Windows环境下,创建一个包含n个线程的控制台进程。用这n个线每个线程按相应测试数据文件的要求,进行读写操作。程来表示 n 个读者或写者。请用信号量机制分别实现读者优先和写者优先的读者-写者问题。

将所有的读者和所有的写者分别放进两个等待队列中,当读允许时就让读者队列释放一个或多个读者,当写允许时,释放第一个写者操作。

读者-写者的读写限制(包括读者优先和写者优先)

1)写-写互斥,即不能有两个写者同时进行写操作;

2)读-写互斥,即不能同时有一个读者在读,同时却有一个写者在写;

3)读读允许,即可以有 2 个以上的读者同时读;

4)读者优先附加条件:如果一个读者申请进行读操作,同时又有一个读操作正在进行读操作,则该读者可以直接开始读操作;

5)写者优先附加条件:如果一个读者申请进行读操作时已经有一个写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。

2.各模块的伪码算法

读者优先算法:

设置两个互斥信号量:

rwmutex 用于写者与其他读者/写者互斥的访问共享数据rmutex 用于读者互斥的访问

读者计数器 readcount

semaphore rwmutex=1, rmutex=1;

int readcount = 0;

reader i //读者进程i=1,2,….

do{

P(rmutex); //读者互斥

readcount++; //读者数加1

if (readcount == 1) P(rwmutex); //读者写者互斥 V(rmutex);

读者读数据;

P(rmutex);

Readcount--;

if (readcount == 0) V(rwmutex);

V(rmutex);

}while(1);

writer j //写者进程j = 1,2,….

do{

P(rwmutex);

写文件;

V(rwmutex);

}while(1);

写者优先算法:

相关文档
最新文档