读者—写者问题程序设计

读者—写者问题程序设计

ID:39625143

大小:58.50 KB

页数:6页

时间:2019-07-07

读者—写者问题程序设计_第1页
读者—写者问题程序设计_第2页
读者—写者问题程序设计_第3页
读者—写者问题程序设计_第4页
读者—写者问题程序设计_第5页
资源描述:

《读者—写者问题程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、上机实验报告指导教师:课程名称Linux系统程序设计实验日期2013.07.01-07.05专业班级计算机11-5班姓名学号实验题目读者—写者问题程序设计实验序号1实验地点A604实验目的了解进程同步的问题,理解信号量机制的原理,掌握信号量解决同步问题的方法,进而学会进程的同步与互斥。实验任务及要求用n个线程来表示n个读者或写者。每个线程按相应测试数据文件的要求,进行读写操作。用信号量机制分别实现读者优先和写者优先的读者-写者问题。读者-写者问题的读写操作限制:1)写-写互斥;2)读-写互斥;3)读-读允

2、许;写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。实验内容(步骤、表格、算法或流程图等)概要设计:(1)控制流程用CheckPersonList(PersonLists)函数检查PersonLists中是否有为创建的进程(读写者)。如果有则创建相应的读写线程(2)创建读写者用boolCreateReader(intStartTime,intWorkTime)函数创建读者写者相应的线程,其中由windows提供的函数为C

3、reateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);返回的是DWORD型变量。在CreateReader(intStartTime,intWorkTime)中还会初始化相应的读写者的基本信息,例如何时申请数据何时读数据何时关闭线程等等。(3)读写者进程参见图2.1读者-写者的完整流程图。(4)同步与互斥WaitForSingleObject(信号量名字,infinite)和ReleaseSemaphore(信号量名字,1,null)用于

4、实现同步于互斥,执行WaitForSingleObject(信号量名字,infinite)信号量相应的信号量减1,执行ReleaseSemaphore(信号量名字,1,null)恢复1。源程序及注释(不足可加附页)//写者优先算法#include#include#include#include#include#include#defineMAX_PERSON10#defineREADER0

5、#defineWRITER1#defineEND-1#defineRREADER#defineWWRITERtypedefstruct_Person{HANDLEThread;intType;intStartTime;intWorkTime;intID;}Person;PersonPersons[MAX_PERSON];intNumPerson=0;longCurrentTime=0;intPersonLists[]={1,R,1,3,2,W,2,5,/*读写互斥*/3,W,5,5,/*写写互斥*/4,R

6、,3,5,/*写读互斥*/5,R,15,2,/*读读不互斥*/END,};intrfirst=0;intwfirst=0;intNumOfReaders=0;intNumOfWriters=0;HANDLErsem;/*初值为1的互斥信号量,在至少有一个写者准备访问数据时就不允许随后来的读者访问数据*/HANDLEwsem;/*初值为1的互斥信号量,之后有一个写者访问数据时其他写者和读者就被阻止对数据的访问*/HANDLEz;/*初值为1的互斥信号量,在至少有一个写着准备访问数据、且后面已经来一个读者时再

7、来的读者将在这个信号量上等待*/HANDLEReadMutex;/*创建写者的互斥信号量,初值为1*/HANDLEWriteMutex;/*创建读者的互斥信号量,初值为1*/voidCheckPersonList(int*pPersonList);/*查看人数,为创建读写者线程*/boolCreateReader(intStartTime,intWorkTime);boolCreateWriter(intStartTime,intWorkTime);DWORDWINAPIReaderProc(LPVOID

8、lpParam);/*读者进程程序*/DWORDWINAPIWriterProc(LPVOIDlpParam);/*写着进程程序*/#include"Writerprior.h"intmain(){rsem=CreateSemaphore(NULL,1,1,NULL);wsem=CreateSemaphore(NULL,1,1,NULL);z=CreateSemaphore(NULL,1,1,NULL);ReadMutex=C

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。