学习Windows平台下信号量的API函数的使用;
编制读写进程的模拟信息文件,里面包含多个读写进程的运行描述:如0秒到达读进程1,读5秒结束;1秒到达写进程2,写3秒结束;2秒到达读进程3,读4秒结束。可以写为:
0:1,r,5;
1:2,w,3;
2:3,r,4;
编制读者--写者问题的写者优先算法,从进程模拟信息文件中取出进程信息,按要求启动对应的进程模拟程序,决定出读者/写者进程的运行次序。
测试:针对进程模拟信息文件里面的数据为正常、缺项、格式不正确等各种情况,检测程序的执行结果
设计读者--写者问题的写者优先算法;
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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 WcountWriter: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);
endReader: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 请完成下列相关问题!