主观题:h413.用PV操作解决读者-写者问题的正确程序如下:
用PV操作解决读者-写者问题的正确程序如下:
begin
S, Sr: Semaphore;
rc: integer;
S:=1; Sr:=1; rc:=0;
parbegin
PROCESS Reader i ( i = 1, 2…)
begin
P(Sr) ;
rc:=rc+1;
if rc=1 then P(S);
V(Sr);
read file;
P(Sr);
rc:=rc-1
if rc=0 thenV(S);
V(Sr);
end ;
PROCESS Writer j ( j = 1, 2 … )
begin
P(S);
Write file;
V(S)
end;
parend ;
end;
请回答:(1)信号量Sr的作用;(2)程序中什么语句用于读写互斥,写写互斥;(3)若规定仅允许5个进程同时读怎样修改程序?
答案:解:
(1) 信号量Sr的作用的作用是保证读者互斥访问共享变量rc。(2分)
(2) 程序中语句if rc=1 then P(S);用于读写互斥;语句P(S); 用于写写互斥。(2分)
(3) 若规定仅允许5个进程同时读,修改程序如下(加粗部分是新增加的内容):(6分)
begin
S, Sr: Semaphore;
rc: integer;
S:=1; Sr:=1; rc:=0;
**S1 : semaphore := 5;**(2分)
parbegin
PROCESS Reader i ( i = 1, 2…)
begin
**P(S1);**(2分)
P(Sr) ;
rc:=rc+1;
if rc=1 then P(S);
V(Sr);
read file;
P(Sr);
rc:=rc-1
if rc=0 thenV(S);
V(Sr);
**V(S1);**(2分)
end ;
PROCESS Writer j ( j = 1, 2 … )
begin
P(S);
Write file;
V(S)
end;
parend ;
end;
begin
S, Sr: Semaphore;
rc: integer;
S:=1; Sr:=1; rc:=0;
parbegin
PROCESS Reader i ( i = 1, 2…)
begin
P(Sr) ;
rc:=rc+1;
if rc=1 then P(S);
V(Sr);
read file;
P(Sr);
rc:=rc-1
if rc=0 thenV(S);
V(Sr);
end ;
PROCESS Writer j ( j = 1, 2 … )
begin
P(S);
Write file;
V(S)
end;
parend ;
end;
请回答:(1)信号量Sr的作用;(2)程序中什么语句用于读写互斥,写写互斥;(3)若规定仅允许5个进程同时读怎样修改程序?
答案:解:
(1) 信号量Sr的作用的作用是保证读者互斥访问共享变量rc。(2分)
(2) 程序中语句if rc=1 then P(S);用于读写互斥;语句P(S); 用于写写互斥。(2分)
(3) 若规定仅允许5个进程同时读,修改程序如下(加粗部分是新增加的内容):(6分)
begin
S, Sr: Semaphore;
rc: integer;
S:=1; Sr:=1; rc:=0;
**S1 : semaphore := 5;**(2分)
parbegin
PROCESS Reader i ( i = 1, 2…)
begin
**P(S1);**(2分)
P(Sr) ;
rc:=rc+1;
if rc=1 then P(S);
V(Sr);
read file;
P(Sr);
rc:=rc-1
if rc=0 thenV(S);
V(Sr);
**V(S1);**(2分)
end ;
PROCESS Writer j ( j = 1, 2 … )
begin
P(S);
Write file;
V(S)
end;
parend ;
end;