读者与写者问题

读者与写者问题

ID:27821776

大小:410.73 KB

页数:10页

时间:2018-12-06

读者与写者问题_第1页
读者与写者问题_第2页
读者与写者问题_第3页
读者与写者问题_第4页
读者与写者问题_第5页
资源描述:

《读者与写者问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、2012—2013学年第一学期学院综合设计《读者与写者问题》学号:姓名:成绩:评语:设计要求:用P、V操作实现读者写者问题,写考不多于5个,读考不多于20个。所有读者和写者访问同一个文件all.txt,每个写者向文件添加一行,内容是“I'mthewriternumberX.ItisTIME.”,其中X是pid,TIME是访问文件的时间,格式为hh-mm-ss.ddd;每个读者读出最后一个写考的pid和写的时间,并在屏幕上输出。每个读者或写者的访问次数为32-100之间的随机数,同一个写者相邻两次的访问间隔不得短于0.1秒,同一个读者相邻两次的访问间隔不得短于0.05秒。目录1、概述21.

2、1设计题目21-2设计目的21.3开发环境21.4设计要求22、设计思想23、具体程序实现24、运行结果65、总结86、参考文献9读者写者问题的实现1、概述1.1设计题目读者写者问题的实现1.2设计目的通过对操作系统内核实现代码的阅读、修改、设计,理解和掌握复杂的操作系统的工作原理。通过研究Linux的线程机制和信号量实现读者写者(Reader-Writer)问题并发控制。1.3开发环境使用的操作系统:Linux系统使用的编程语言:C语言1、4设计要求用P、V操作实现读者写者问题,写者不多于5个,读者不多于20个。所有读者和写者访问同一个文件all.txt,每个写者向文件添加一行,内容是

3、“I'mthewriternumberX.ItisTIME.”,其屮X是pid,TIME是访问文件的时间,格式为hh-mm-ss.ddd;每个读者读岀最后一个写者的pid和写的时间,并在屏幕上输出。每个读者或写者的访问次数为32-100之间的随机数,同一个写者相邻两次的访问间隔不得短于0.1秒,同一个读者相邻两次的访问间隔不得短于0.05秒。2、设计思想读者写者问题的定义如下:有一个许多进程共享的数据区,这个数据区可以是一个文件或者主存的一块空间;有一些只读取这个数据区的进程(Reader)和一些只往数据区写数据的进程(Writer),此外还需要满足以下条件:(1)任意多个读进程可以同时

4、读这个文件;(2)-次只有一个写进程可以往文件中写;(3)如果一个写进程正在进行操作,禁止任何读进程度文件。3、具体程序实现#include#include#include#include#include#include#defineMAX.PERSON100#defineREADER0〃读者#defineWRITER1〃写者#defineEND-1#defineRREADER#defineWWRITERtypedefstruct_Person{HANDLEm.hThre

5、ad;//定义处理线程的句柄intm_nType;//进程类型(读写)intm_nStartTime;//开始吋间intm_nWorkTime;//运行时间intm_nID;//进程号{Person;Persong_PersonsfMAX_PERSON];intg_NumPerson=0;longg_CurrentTime=0;//基本时间片数intg_PersonLists[]={〃进程队列1,W,4,5,2,W,16,4,3,R,5,2,4,W,6,5,5,R,4,3,END,};intg_NumOfReading=0;intg_NumOfWriteRequest=0;//申请写进程

6、的个数HANDLEg_hReadSemaphore;//读者信号HANDLEg_hWriteSemaphore;//写者信号boolfinished=false;〃所有的读完成//boolwfinished=false;〃所有的写完成voidCreatePersonList(int*pPersonList);boolCreateReader(intStartTime,intWorkTime,intID);boolCreateWriter(intStartTime,intWorkTime,intID);DWORDWINAPIReaderProc(LPVOIDIpParam);DWORDWI

7、NAPIWriterProc(LPVOIDIpParam);intmain(){g_hReadSemaphore=CreateSemaphore(NULL,1,100,NULL);〃创建信号灯,当前可的资命数为,最大为g_hWriteSemaphore=CreateSemaphore(NULL,1,100,NULL);〃创建信号灯,当前可用的资忘数为,最大为CreatePersonList(g_PersonLists);//Crea

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

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

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