




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验一 读者-写者问题模拟实现一、实验题目模拟实现读者-写者问题二、实验目的通过模拟实现经典的读者写者问题,巩固对同步机制的学习,学会运用信号量、PV原语处理进程间的同步和互斥。三、实验要求设计实现读者-写者问题模拟程序。在Windows xp环境下,创建一个控制台程序,此程序包含n个线程。用这n个线程来表示n个读者或写者。每个线程按相应测试数据文件(后面有介绍)的要求进行读写操作。用信号量机制分别实现读者优先或写者优先的读者-写者问题。提示:1、读者-写者问题的读写操作限制(包括读者优先和写者优先):1)写-写互斥,即不能有两个写者同时进行写操作。2)读-写互斥,即不能同时有一个线程在读,而
2、另一个线程在写。,3)读-读允许,即可以有一个或多个读者在读。 如果读者来: 无读者、写者,新读者可以读 有写者等待,但有其他读者正在读,新读者可以读 有写者写,新读者等 如果写者来: 无读者,新写者可以写 有读者,新写者等待 有其他写者,新写者等待读者优先的附加限制:如果一个读者申请进行读操作时已有另一个读者正在进行读操作,则该读者可直接开始读操作。写者优先的附加限制:如果一个读者申请进行读操作时已有另一写者在等待访问共享资源,则该读者必须等到没有写者处于等待状态后才能开始读操作。2、P、 V操作如下 读者:BEGINP(mutex);/上锁,互斥其他读者,为了保证只有一个读者改变read_
3、countread_count:=read_count+1;IF read_count=1 /第一个读者,则上写者的锁,保证读得时候不能让写者写THEN P(writer)V(mutex);读文件;P(mutex); /同上,互斥读者,为了保证只有一个读者改变read_countread_count:=read_count-1;IF read_count=0 /最后一个读者,signal写者,可以写THEN V(write);V(mutex);END; 写者:BEGINP(write);写文件;V(write);END;四、实验报告提纲1、实验题目及要求。2、程序中使用的数据结构及window
4、s API函数说明。如:CreateSemaphore( )WaitForSingleObject( )ReleaseSemaphore( )CreateThread( )Sleep()system(pause);等3、程序调试(按照以下测试数据要求进行调试并截图表示)(1)测试数据文件格式测试数据文件包括n行测试数据,分别描述创建的n个线程是读者还是写者,以及读写操作的开始时间和持续时间。每行测试数据包括四个字段,各个字段间用空格分隔。第一字段为一个正整数,表示线程序号。第二字段表示相应线程角色,R表示读者,w表示写者。第三字段为一个正数,表示读写操作的开始时间:线程创建后,延迟相应时间(单
5、位为秒)后发出对共享资源的读写申请。第四字段为一个正数,表示读写操作的持续时间。当线程读写申请成功后,开始对共享资源的读写操作,该操作持续相应时间后结束,并释放共享资源。下面是一个测试数据文件的例子:1,W, 3, 5, 2, W, 16, 5, 3, R, 5, 2,4, W, 6, 5,5, R, 4, 36,R, 11,4(2)运行结果显示要求利用以上测试数据要求在每个线程创建、发出读写操作申请、开始读写操作和结束读写操作时分别显示一行提示信息,以确定所有处理都遵守相应的读写操作限制。4、 结果分析和讨论。5、 附一份源程序并附上注释。实验要求(二者选一):1、参考“代码参考”(见下页)
6、代码设计内容,对程序进行必要的修改并加注释。按要求完成实验报告 2、自己动手设计数据结构,并完成程序代码,代码正确无误,实验报告完整。代码参考#include #include #include #include #include #include #define MAX_PERSON 100#define READER 0 /读者#define WRITER 1 /写者#define END -1#define R READER#define W WRITER typedef struct _PersonHANDLE m_hThread;/定义处理线程的句柄int m_nType;/进程类型
7、(读写)int m_nStartTime;/开始时间int m_nWorkTime;/运行时间int m_nID;/进程号Person; Person g_PersonsMAX_PERSON;int g_NumPerson = 0;long g_CurrentTime= 0;/基本时间片数 int g_PersonLists = /进程队列1, W, 4, 5, 2, W, 16, 4, 3, R, 5, 2,4, W, 6, 5, 5, R, 4, 3, END,;int g_NumOfReading = 0;int g_NumOfWriteRequest = 0;/申请写进程的个数HAND
8、LE g_hReadSemaphore;/读者信号HANDLE g_hWriteSemaphore;/写者信号bool finished = false; /所有的读完成void CreatePersonList(int *pPersonList);bool CreateReader(int StartTime,int WorkTime,int ID);bool CreateWriter(int StartTime,int WorkTime,int ID);DWORD WINAPI ReaderProc(LPVOID lpParam);DWORD WINAPI WriterProc(LPVOI
9、D lpParam);int main()g_hReadSemaphore = CreateSemaphore(NULL,1,100,NULL); /创建信号量g_hWriteSemaphore = CreateSemaphore(NULL,1,100,NULL); /创建信号量CreatePersonList(g_PersonLists); / Create All the reader and writersprintf(Created all the reader and writern.n);g_CurrentTime = 0;while(true)g_CurrentTime+;Sle
10、ep(100); / 100 msprintf(CurrentTime = %dn,g_CurrentTime);if(finished) return 0;system (pause); / return 0;void CreatePersonList(int *pPersonLists)int i=0;int *pList = pPersonLists;bool Ret;while(pList0 != END)switch(pList1)case R:Ret = CreateReader(pList2,pList3,pList0);/break; case W:Ret = CreateWr
11、iter(pList2,pList3,pList0);break;if(!Ret)printf(Create Person %d is wrongn,pList0); pList += 4; / move to next person listDWORD WINAPI ReaderProc(LPVOID lpParam)/读过程Person *pPerson = (Person*)lpParam;/ wait for the start timewhile(g_CurrentTime != pPerson-m_nStartTime) printf(Reader %d is Requesting
12、 .n,pPerson-m_nID);printf(nn*n);/ wait for the write requestWaitForSingleObject(g_hReadSemaphore,INFINITE); if(g_NumOfReading =0)WaitForSingleObject(g_hWriteSemaphore,INFINITE); g_NumOfReading+;ReleaseSemaphore(g_hReadSemaphore,1,NULL);pPerson-m_nStartTime = g_CurrentTime;printf(Reader %d is Reading
13、 the Shared Buffer.n,pPerson-m_nID);printf(nn*n);while(g_CurrentTime m_nStartTime + pPerson-m_nWorkTime)printf(Reader %d is Exit.n,pPerson-m_nID);printf(nn*n);WaitForSingleObject(g_hReadSemaphore,INFINITE);g_NumOfReading-;if(g_NumOfReading = 0)ReleaseSemaphore(g_hWriteSemaphore,1,NULL);/此时没有读者,可以写Re
14、leaseSemaphore(g_hReadSemaphore,1,NULL);if(pPerson-m_nID = 4) finished = true; /所有的读写完成ExitThread(0);return 0;DWORD WINAPI WriterProc(LPVOID lpParam)Person *pPerson = (Person*)lpParam;/ wait for the start timewhile(g_CurrentTime != pPerson-m_nStartTime)printf(Writer %d is Requesting .n,pPerson-m_nID
15、);printf(nn*n);WaitForSingleObject(g_hWriteSemaphore,INFINITE);/ modify the writers real start timepPerson-m_nStartTime = g_CurrentTime;printf(Writer %d is Writting the Shared Buffer.n,pPerson-m_nID);while(g_CurrentTime m_nStartTime + pPerson-m_nWorkTime)printf(Writer %d is Exit.n,pPerson-m_nID);pri
16、ntf(nn*n);/g_NumOfWriteRequest-;ReleaseSemaphore(g_hWriteSemaphore,1,NULL);if(pPerson-m_nID = 4) finished = true;/所有的读写完成ExitThread(0);return 0;bool CreateReader(int StartTime,int WorkTime,int ID)DWORD dwThreadID;if(g_NumPerson = MAX_PERSON)return false;Person *pPerson = &g_Personsg_NumPerson;pPerso
17、n-m_nID = ID;pPerson-m_nStartTime = StartTime;pPerson-m_nWorkTime = WorkTime;pPerson-m_nType = READER;g_NumPerson+;/ Create an New ThreadpPerson-m_hThread= CreateThread(NULL,0,ReaderProc,(LPVOID)pPerson,0,&dwThreadID);if(pPerson-m_hThread = NULL)return false;return true;bool CreateWriter(int StartTime,int WorkTime,int ID)DWORD dwThreadID;if(g_NumPerson = MAX_PERSON) return false;Person *pPerson = &g_Personsg_NumPerson;pPe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林区划与经营类型
- 离婚协议书模板:房产、车辆分割及债务处理
- 二手房买卖合同签订后的房屋交易产权过户及登记手续
- 男方家庭暴力受害者女方全面权益保障离婚协议
- 离婚协议财产分割及房产分割与子女抚养费支付起诉状
- 农村电商项目投资借款合同模板及扶贫协议
- 二婚再婚家庭财产分配及子女抚养责任协议书
- 小飞机粘土课件
- 2025年单招试题及答案技术
- 邮储银行2025安阳市秋招笔试英语题专练及答案
- 专家顾问聘用合同协议书范本7篇
- 1.1《土壤里面有什么》课件 2025-2026学年苏教版科学三年级上册
- 1.2我们都是社会的一员 课件- 2025-2026学年统编版道德与法治八年级上册
- 2025年北师大版新教材数学一年级上册教学计划(含进度表)
- 人教版2024-2025学年七年级数学上册教学计划(及进度表)
- 抗滑桩施工方案完整版
- 常用水利规范目录
- 高级财务管理(第三版)第02章-财务估价模型概览
- 人教版(新起点)英语六年级上Unit 1《In China》单元测试卷
- CNAS和CMA需要编制的表单
- 乐软物业经营管理系统V8.0操作手册
评论
0/150
提交评论