操作系统原理实验报告

loading 分享 2026-8-20 下载文档

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)等三


操作系统原理实验报告.doc 将本文的Word文档下载到电脑
搜索更多关于: 操作系统原理实验报告 的文档
相关推荐
相关阅读