读者和写者问题

2019-08-30 17:06

课 程 设 计

课程名称

操作系统 学 院 计算机科学与技术学院

专 业

软件工程专业

班 级 姓 名 指导教师

2014——2015学年 第1学期

学 号:

1

目录

目 录 .................................................................................................................................... 错误!未定义书签。 1 设计概述................................................................................................................................................................... 3 1.1问题描述: ........................................................................................................................................................ 3 1.2问题解读及规则制定 ........................................................................................................................................ 3 2课程设计目的及功能 ................................................................................................................................................ 3 2.1 设计目的 ........................................................................................................................................................... 3 2.2 设计功能 ........................................................................................................................................................... 3 3模块介绍.................................................................................................................................................................... 3 3.1函数原型 ............................................................................................................................................................. 3 3.2 PV操作代码 ....................................................................................................................................................... 4 4测试用例,运行结果与运行情况分析 .................................................................................................................... 6 4.1测试用例 ............................................................................................................................................................ 6 4.2运行结果 ............................................................................................................................................................ 7 4.3运行情况分析 .................................................................................................................................................... 9 5自我评价与总结 ........................................................................................................................................................ 9 6 参考文献................................................................................................................................................................. 10 7 附录:(完整代码) ............................................................................................................................................. 10

2

实现读者写者(Reader-Writer Problem)问题

1 设计概述

1.1问题描述:

通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。

1.2问题解读及规则制定

一个数据文件或记录可被多个进程所共享,我们将其中只要求读该文件的进程称为读者,其他进程称为写者.多个读者和多个写者进程在某个时间段内对该文件资源进行异步操作,也就是说允许多个进程同时读一个共享对象,但不允许一个写进程和其他读进程或写进程同时访问共享对象,因此,所谓\读者--写者问题\就是指必须保证一个写进程和其他进程(写进程或者读进程)互斥地访问共享对象的同步问题.两者的读写操作限制规则如下:

(1) 写--写互斥,即不允许多个写着同时对文件进行写操作

(2) 读--写互斥,即不允许读者和写者同时对文件分别进行读写操作 (3) 读—读允许,即允许多个读者同时对文件进行读操作

2课程设计目的及功能

2.1 设计目的

通过实验模拟读者和写者之间的关系,了解并掌握他们之间的关系及其原理。由此增加对进程同步的问题的了解。具体如下:

1)掌握基本的同步互斥算法,理解读者和写者模型 2)了解多线程的并发执行机制,线程间的同步和互斥

2.2 设计功能:

利用模拟用信号量机制实现读者和写者问题:通过用户控制读进程和写进程,反应读者和写者问题中所涉及的进程的同步与互斥。

3模块介绍

3.1函数原型

读者和写者进程由11个函数组成,分别如下: (附件包含全部具体实现)

void P_write(int); void write(int); void V_write(int); void P_radd(int);

3

void radd(int); void P_read(int); void V_radd(int); void read(int); void P_rsub(int); void rsub(int); void V_read(int); void V_rsub(int);

3.2 PV操作代码:

模拟写者对Wmutex的P操作,同时为写者进程也作写的入口:void P_write(int i) { Wmutex--; if(Wmutex<0) { w_wait[-Wmutex-1]=i; } else write(i); }

模拟写者对Wmutex的V操作,写操作完成的时候调用: void V_write(int i) { w[i]=0; Wmutex++; if(Wmutex<=0) { int k,j; if((w_wait[0]>=0)&&(w_wait[0]

模拟读之前对Rmutex的P操作,同时也作为读者进程的入口:void P_radd(int i) {

4

Rmutex--; if(Rmutex<0) { r_wait[-Rmutex]=i; } else radd(i); }

模拟读者对Wmutex的P操作: void P_read(int i) { Wmutex--; if(Wmutex<0) { w_wait[-Wmutex-1]=10; r_wait[0]=i; } else V_radd(i); }

模拟读之前对Rmutex的V操作: void V_radd(int i) { Rmutex++; if(Rmutex<=0) { int k,j; j=r_wait[0]; for(k=0;k

模拟读之后对Rmutex的P操作,读操作完成的时候调用:void P_rsub(int i) { r[i]=0; Rmutex--; rsub(i); }

模拟读者对Wmutex的V操作: void V_read(int i) { Wmutex++; if(Wmutex<=0) { int k,j;

5


读者和写者问题.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年最新人教版六年级语文下册第二单元测试卷及答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: