用信号量机制实现的写者优先的算法如
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用信号量机制实现的写者优先的算法如:
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