用PV操作解决读者写者问题的正确程序如下:
beginS,Sr:Semaphore;rc:integer;
S:=1;Sr:=1;rc:=0;
cobeginprocessReaderi(i=1,2…)
beginP(Sr)
rc;=rc+1;
ifrc=1thenP(S);
V(Sr);
readfile;
P(Sr);
Rc:=rc-1
ifrc=0then
V(S);
V(Sr);;
end;
processWriterj(j=1,2…)
beginP(S);
Writefile;
V(S)
End;
coend;
end;
请回答:
(1)信号量Sr的作用;
(2)程序中什么语句用于读写互斥,写写互斥;
(3)若规定仅允许5个进程同时读怎样修改程序?
(1)Sr用于读者计数rc的互斥信号量; (2)if rc=1 then P(S)中的P(S)用于读写互斥,写者进程中的P(S)用于写写互斥、读写互斥。 (3)程序中增加一个信号量S5,初值为5,P(S5)语句加在读者进程P(Sr)之前,V(S5)语句加在读者进程第2个V(Sr)之后。