读者写入者问题.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、阅读者写入者问题描述 有一个公用的数据集,有很多人需要访问,其中一些需要阅读其中的信息,一些需要修改其中的消息。阅读者可以同时访问数据集,而写入者只能互斥的访问数据集,不能与任何的进程一起访问数据区。 二、程序运行说明 1.本程序主要用于说明阅读者写入者问题中的资源互斥访问的调动策略,并模仿其访问的过程。采用书上的伪码编制而成,实际上采用的是读优先策略。 2.在本程序中用于表现的图形界面说明: 在程序编译运行后会出现中间一个大的圆圈表示公用的资源,上面一排五个矩形表示5个读者,下面的五个矩形表示五个写入者。每个读者和写入者都有3种状态,休息,等待和操作(读入或者写入)分别用黑颜色,绿颜色,红颜色表示休息,等待和操作。一旦操作者获得资源,可以进行读或者写,我们就划一条从操作者中心到资源中心的线,表示开始操作。 三、关于阅读者写入者问题的mfc程序分析: A. ReaderAndWriter.c 变量说明: HINSTANCE hInst 应用实例句柄 HWND hWndMain 主窗口句柄 HBITMAP hbmpOffscreen 位图句柄 extern int Readercount; 读者数(外部接口) extern int readerstate[CCounter]; 读者状态(外部变量) extern int writerstate[CCounter]; 写入者状态(外部变量) extern int resourcestate[CCounter]; 资源状态(外部变量) extern HANDLE count; 资源(count)句柄 函数说明: LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 处理消息函数: 根据进程调度的消息的不同处理不同的消息包括:关闭窗口,销毁资源,画窗口,和重画窗口等 BOOL CreateOffscreen() 获得当前窗口的一个位图句柄 void RenderOffscreen(HDC hDestDC) 通过位图句柄画演示的界面 1.先画资源(中间的大圆表示) 2.接着画读者和写入者: 读者和写入者都用圆表示,根据他们的状态选择画笔(为resting 状态时为黑色圆圈,为等待时为绿色,操作时为红色圆圈) 3.最后画操作: 判断的依据是若读者或者写入者(获得资源) 则令读者和写入者对应编号的资源数组元素为读或者写,这样就可以画出一条线来表示读者或者写入者在进行操作。 BOOL InitApplication(HINSTANCE hInstance) 初始化应用窗口 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 初始化主窗口 弹出选择对话框进行模式选择,并启动进程 int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 调用前面的函数并对进线程消息进行处理 B.Mutex.c 变量说明: extern HWND hWndMain 在ReaderAndWriter.c中定义(外部接口) extern BOOL bWaitMultiple 在ReaderAndWriter.c中定义(外部接口) int Readercount 读者数 int readerstate[CCounter] 读者状态 int writerstate[CCounter] 写入者状态 int resourcestate[CCounter] 资源状态 CRITICAL_SECTION RP_Write 临界区 HANDLE count Count 资源句柄 函数说明: 1. DWORD WINAPI ReaderThread (LPVOID pVoid) 读者进程: 根据前面的资源分配策略,对于读进程,我们初始化设置都是处于休息状态,然后要是资源可读,根据进程到来的快慢,分配资源给读者,是其从休息,等待到读状态,最后释放资源进入休息状态,一直循环。一旦有一个读者进入临界区,我们就封锁临界区,可以让所用的读者进入,而不让写入者进入,并用一个资源控制readercount,保证每次只有一个进程对变量进行操作。这样,直到每一个读者都读完,没有一个读者的时候,开始释放临界区,这样写入者就可以进入与读者进行资源的争夺,决

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档