云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 操作系统原理实验报告

操作系统原理实验报告

  • 62 次阅读
  • 3 次下载
  • 2025/5/6 9:26:00

rc=CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer), &BytesRead,NMPWAIT_USE_DEFAULT_WAIT);

rc=strcmp(OutBuffer,\ if (rc==0) break; if (rc==0) {

err=GetLastError();

printf(\ exit(1); }

else printf(\ }

printf(\return nRetCode; }

实验题目:实验五 读者-写者问题

完成人:XXX

报告日期:2018年4月28日 七、

实验容简要描述

a) 创建一个控制台进程,此进程包含n个线程。用这n个线程来表示n个

读者或写者。每个线程按相应测试数据文件的要求进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。 b) 读者-写者问题的读写操作限制(包括读者优先和写者优先):

? 写-写互斥,即不能有两个写者同时进行写操作。

? 读-写互斥,即不能同时有一个线程在读,而另一个线程在写。 ? 读-读允许,即可以有一个或多个读者在读。

c) 读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者

正在进行读操作,则该读者可直接开始读操作。

d) 写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在

等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。

e) 运行结果显示要求:要求在每个线程创建、发出读写操作申请、开始读

写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。

八、

程序设计

7、 设计思路

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

读者优先:

如果没有写者正在操作,则读者不需要等待,用一个整型变量readcount记录当前的读者数目,用于确定是否释放写者线程,(当readcout=0 时,说明所有的读者都已经读完,释放一个写者线程),每个 读者开始读之前都要修改readcount,为了互斥的实现对readcount 的修改,需要一个互斥对象Mutex来实现互斥。

另外,为了实现写-写互斥,需要一个临界区对象 write,当写者发出写的请求时,必须先得到临界区对象的所有权。通过这种方法,可以实现读写互斥,当readcount=1 时,(即第一个读者的到来时,),读者线程也必须申请临界区对象的所有权.

当读者拥有临界区的所有权,写者都阻塞在临界区对象write上。当写者拥有临界区对象所有权时,第一个判断完readcount==1 后,其余的读者由于等待对readcount的判断,阻塞在Mutex上!

写者优先:

写者优先和读者优先有相同之处,不同的地方在:一旦有一个写者到来时,应该尽快让写者进行写,如果有一个写者在等待,则新到的读者操作不能读操作,为此添加一个整型变量writecount,记录写者的数目,当writecount=0时才可以释放读者进行读操作!

为了实现对全局变量writecount的互斥访问,设置了一个互斥对象Mutex3。

为了实现写者优先,设置一个临界区对象read,当有写者在写或等待时,读者必须阻塞在临界区对象read上。

读者除了要一个全局变量readcount实现操作上的互斥外,还需要一个互斥对象对阻塞在read这一个过程实现互斥,这两个互斥对象分别为mutex1和mutex2。

8、 主要数据结构

void RP_ReaderThread(void* p) 读者线程信息 void RP_WriterThread(void* p) 写者线程信息 void ReaderPriority(char* file) 读者优先处理函数 void WP_ReaderThread(void* p) 读者线程信息 void WriterPriority(char* file) 写者优先处理函数 三、实验结果 1、测试结果分析 A. 读者优先运行

B. 写者优先运行

四、实验体会 1、实验体会和收获

Windows2000/XP提供了互斥量(mutex)、信号量(semapore)、事件(event)等三

搜索更多关于: 操作系统原理实验报告 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

rc=CallNamedPipe(lpName,InBuffer,sizeof(InBuffer),OutBuffer,sizeof(OutBuffer), &BytesRead,NMPWAIT_USE_DEFAULT_WAIT); rc=strcmp(OutBuffer,\ if (rc==0) break; if (rc==0) { err=GetLastError(); printf(\ exit(1); } else printf(\ } printf(\return nRetCode; } 实验题目:实验五 读者-写者问题 完成人:XXX 报告日期:2018年4月28日 七、 <

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com