ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:17.28KB ,
资源ID:24476785      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24476785.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(读者写者问题实验报告.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

读者写者问题实验报告.docx

1、读者写者问题实验报告操作系统实验报告实验序号:操作系统实验(二) 实验项目名称:读者写者问题 学号姓名队别实验地点指导教员实验时间一、实验目的及要求实验目的:综合运用多进程并发控制,进程同步互斥,信号量机制等原理解决问题。实验要求:本题目安排16学时,要求党员根据题目要求,写出算法,在平台上进行程序设计和调试,在运行成功的基础上,整理出源程序和运行结果写出设计报告。二、实验设备(环境)实验设备: WINDOWS 2000环境、VC平台、WIN 32 API三、实验内容与步骤实验内容与步骤:可以将所有读者和写者分别存于一个读者等待队列和一个写者等待队列,每当读允许时,就从读者队列中释放一个或多个

2、读者线程进行读操作;每当写允许时,就从写者队列中释放一个写者进行写操作a)读者优先读者优先指的是除非有写者在写文件,否则读者不需要等待所以可以用一个整形变量记录当前读者的数目,用于确定是否需要释放正在等待的写者线程每一个读者开始读文件时,必须修改变量因此需要一个互斥对象mutex来实现对全局变量修改时的互斥另外,为了实现写互斥,需要增加一个临界区对象write.当写者发出写请求时,必须申请临界区对象的所有权通过这种方法,也可以实现读写互斥,当read_count=1时,读者线程也必须申请临界区对象的所有权当读者拥有临界区所有权时,写者阻塞在临界区对象write上当写者拥有临界区所有权时,第一个

3、读者判断完”read_count=1”后阻塞在write上,其余的读者由于等待对read_count的判断,阻塞在mutex上b)写者优先写者优先与读者优先类似不同之处在于一旦一个写者到来,它应该尽快对文件进行写操作,如果有一个写者在等待,则新到来的读者不允许进行读操作为此应当添加一个整形变量write_count,用于记录正在等待的写者的数目,当write_count=0时,才可以释放等待的读者线程队列为了对全局变量write_count实现互斥,必须增加一个对象mutex3.为了实现写者优先,应当添加一个临界区对象read,当有写者在写文件或等待时,读者必须阻塞在read上读者线程除了要对

4、全局变量read_count实现操作上的互斥外,还必须有一个互斥对象对阻塞read这一过程实现互斥这两个互斥对象分别命名为mutex1和mutex2。四、实验结果与数据处理源代码#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;/定义处理线程的句

5、柄int m_nType;/进程类型(读写)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

6、 = 0;/申请写进程的个数HANDLE g_hReadSemaphore;/读者信号HANDLE g_hWriteSemaphore;/写者信号bool finished = false; /所有的读完成/bool wfinished = false; /所有的写完成void CreatePersonList(int *pPersonList);bool CreateReader(int StartTime,int WorkTime,int ID);bool CreateWriter(int StartTime,int WorkTime,int ID);DWORD WINAPI Reader

7、Proc(LPVOID lpParam);DWORD WINAPI WriterProc(LPVOID 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

8、 all the reader and writern.n);g_CurrentTime = 0;while(true)g_CurrentTime+;Sleep(300); / 300 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

9、)case R:Ret = CreateReader(pList2,pList3,pList0);/351,w452,523,654break; case W:Ret = CreateWriter(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

10、 for the start timewhile(g_CurrentTime != pPerson-m_nStartTime) printf(Reader %d is Requesting .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+;ReleaseSemap

11、hore(g_hReadSemaphore,1,NULL);pPerson-m_nStartTime = g_CurrentTime;printf(Reader %d is Reading 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);

12、g_NumOfReading-;if(g_NumOfReading = 0)ReleaseSemaphore(g_hWriteSemaphore,1,NULL);/此时没有读者,可以写ReleaseSemaphore(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 t

13、imewhile(g_CurrentTime != pPerson-m_nStartTime)printf(Writer %d is Requesting .n,pPerson-m_nID);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(

14、g_CurrentTime m_nStartTime + pPerson-m_nWorkTime)printf(Writer %d is Exit.n,pPerson-m_nID);printf(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 dwTh

15、readID;if(g_NumPerson = MAX_PERSON)return false;Person *pPerson = &g_Personsg_NumPerson;pPerson-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,&

16、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;pPerson-m_nID = ID;pPerson-m_nStartTime = StartTime;pPerson-m_nWorkTime = WorkTime;p

17、Person-m_nType = WRITER;g_NumPerson+;/ Create an New ThreadpPerson-m_hThread= CreateThread(NULL,0,WriterProc,(LPVOID)pPerson,0,&dwThreadID);if(pPerson-m_hThread = NULL)return false;return true; 五、分析与讨论通过这次课程设计,让我对课本上的理论知识有了更深刻的认识,通过自己的动手实践,把理论知识真正的化为了自己可以应用的技能在这次实验中也遇到了不少困难,往往一个小小的错误,就会导致整个程序不能正常运行,寻找错误、发现错误和修改错误,每一次改进都需要花费大量的时间和精力,每取得一次小的成功都离最后的成功更近了一步,每一次改正也会带来巨大的欣喜,这正是一个进步和提高的过程在这个过程中获得了很多收获六、教员评语签名:日期:成绩

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1