任务5- 事件对象解决读写者问题_第1页
任务5- 事件对象解决读写者问题_第2页
任务5- 事件对象解决读写者问题_第3页
任务5- 事件对象解决读写者问题_第4页
任务5- 事件对象解决读写者问题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1. 基本信息 实践题目:事件对象实现P、V操作并解决读写者问题 完成人:班级:07062301姓名:陈杨学号:0706230101 报告日期 :2011年1月5日2. 实践内容简要描述 实践目标 1.掌握事件对象的使用方法2. 理解P、V操作的内部机制及读者-写者问题的实现方法。 实践内容用Win32提供的同步对象实现P、V操作,并使用它们解决读者-写者问题利用事件机制模拟多值信号量。算法如下:binary-semaphore S1, S2; / initializtion: S1 = 1, S2 = 0int C; / initializtion: the count of recourcewait(): Wait(S1); C-; if(C 0) signal(S1); wait(S2); signal(S2);signal(): wait(S1); C+; if(C thread_infon_thread.serial;inFilethread_infon_thread.entity;inFilethread_infon_thread.delay;inFilethread_infon_thread+.persist;inFile.get(); /end whileinFile.close();for( int i = 0; i s1, INFINITE);myS-c-;if(myS-c s1);WaitForSingleObject(myS-s2, INFINITE);SetEvent(myS-s1);void signal(MySemaphore* myS)WaitForSingleObject(myS-s1, INFINITE);myS-c+;if(myS-c s2);elseSetEvent(myS-s1);/ reader priority - reader thread/ p: reader thread info/DWORD WINAPI RP_ReaderThread(void* p)DWORD m_delay;DWORD m_persist;int m_serial;/get info froam param_serial = (ThreadInfo*) (p) - serial;m_delay = (DWORD) (ThreadInfo*)(p) - delay*INTE_PER_SEC);m_persist = (DWORD) (ThreadInfo*)(p) - persist*INTE_PER_SEC);Sleep(m_delay);printf(Reader thread %d sents the reading require .n,m_serial);wait(&ReaderS);if(readcount = 0)wait(&WriterS);readcount+;signal(&ReaderS);/ read fileprintf(Reader thread %d begins to read file.n,m_serial);Sleep(m_persist);/exit threadprintf(Reader thread %d finished reading file.n,m_serial);wait(&ReaderS);readcount-;if(readcount = 0)signal(&WriterS);signal(&ReaderS);return 0;/ Reader priority - writer thread/ p: writer thread info/DWORD WINAPI RP_WriterThread(void* p)DWORD m_delay;DWORD m_persist;int m_serial;/get info froam param_serial = (ThreadInfo*) (p) - serial;m_delay = (DWORD) (ThreadInfo*)(p) - delay*INTE_PER_SEC);m_persist = (DWORD) (ThreadInfo*)(p) - persist*INTE_PER_SEC);Sleep(m_delay);printf(Writer thread %d sents the writing require .n,m_serial);/ wait resourcewait(&WriterS);/ write to the fileprintf(Writer thread %d begins to write to the file.n,m_serial);Sleep(m_persist);/exit threadprintf(Writer thread %d finished Writing to the file.n,m_serial);/release resourcesignal(&WriterS);return 0;3. 实践结果 基本数据 : 源程序代码行数 :256 完成实践投入的时间(小时数):5 资料查阅时间:1.5 编程调试时间:3.5 测试数据设计 “ex5.dat”中测试数据为:1 R 3 52 W 4 53 R 5 24 R 6 55 W 5 3 测试结果分析 待所有读进程执行完毕后写进程才开始一一执行,结果正确。4. 实践体会 实践过程中遇到的问题及解决过程 在调试时,一开始总会出现某个进程sents require的信息重复出现两次,但该线程只执行过一次的现象,调整显示代码的位置得不到正确的结果。后将读写进程函数由void RP_ReaderThread(void* p); void RP_WriterThread(void* p);改为DWORD WINAPI RP_ReaderThread(void* p);DWORD WINAPI RP_WriterThread(void* p);并在函数体最后加上return 0语句。该问题顺利解决。 实践体会和收获 通过此次实验,我学会了事件对象的使用方法,并深入了解了P、V算法的机制及用其解决读着-写者问题的实现方法。同时我也锻炼了自己的编程能力。5. 参考文献 1汤子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论