用信号量机制实现的写者优先的算法如

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档