qq_19870815 2015-12-08 08:23 采纳率: 0%
浏览 2572

设计读者--写者问题的写者优先算法;

学习Windows平台下信号量的API函数的使用;
编制读写进程的模拟信息文件,里面包含多个读写进程的运行描述:如0秒到达读进程1,读5秒结束;1秒到达写进程2,写3秒结束;2秒到达读进程3,读4秒结束。可以写为:
0:1,r,5;
1:2,w,3;
2:3,r,4;
编制读者--写者问题的写者优先算法,从进程模拟信息文件中取出进程信息,按要求启动对应的进程模拟程序,决定出读者/写者进程的运行次序。
测试:针对进程模拟信息文件里面的数据为正常、缺项、格式不正确等各种情况,检测程序的执行结果

  • 写回答

1条回答

  • 普通网友 2015-12-09 01:48
    关注

    http://blog.csdn.net/zoudaokou2006/article/details/3966694

    Var Mut1,Mut2,Wmutex,Fmutex:Semaphore;

    Rcount,Wcount:integer;

    Mut1:=Mut2:=WMutex:=Fmutex:=1;

    Rcount:=Wcount:=0;

    //Fmutex --> 读者写者互斥

    //WMutex --> 写者互斥

    //Mut1 --> access to Rcount && 竞争Fmutex

    //Mut2 --> access to Wcount

    Writer:begin

    Wait(Mut1);

    Wcount:=Wcount+1;

    If Wcount=1 then Wait(Fmutex); //如有读者,写者阻塞在此处

    Signal(Mut1);

    Wait(WMutex);

    写操作;

    Signal(Wmutex);

    Wait(Mut1);

    Wcount:=Wcount-1;

    If Wcount=0 then Signal(Fmutex);

    Signal(Mut1);

    end

    Reader:begin

    Wait(Mut1); //读者需要先申请Mut1,如果有写者在等待Fmutex,则读者被阻塞,写者优先

    Signal(Mut1); //立即释放Mut1,使写者可以随时申请到Mut1

    Wait(Mut2);

    Rcount:=Rcount+1;

    If Rcount=1 then Wait(Fmutex); //第一个读者进入时,申请Fmutex;如有写者,第一个读者会阻塞在此处

    Signal(Mut2);

    读操作;

    Wait(Mut2);

    Rcount:=Rcount-1;

    If Rcount=0 then Signal(Fmutex); //最后一个读者退出时,释放Fmutex

    Singal(Mut2);

    end

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!