主观题:h409.今有一个文件F供进程共享,现把这些进程分成A、B两组,规定同组的进程可以同时读文件F......
今有一个文件F供进程共享,现把这些进程分成A、B两组,规定同组的进程可以同时读文件F;但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读文件F。试用P、V操作来进行管理。
答案:解:
begin
S1,S2,SAB:semaphore;
C1,C2:integer;
S1 := 1;S2 := 1;SAB := 1;C1 := 0;C2 := 0;
parbegin
Process Ai (i = 1,2,3,...)
begin
P(S1);
C1 := C1 + 1 ;
if C1 = 1 then P(SAB);(3分)
V(S1);
Read file F ;
P(S1);
C1 := C1 – 1 ;
if C1 = 0 then V(SAB) ;
V(S1);
end;
Process Bi (i = 1,2,3,...)(3分)
begin
P(S2);
C2 := C2 + 1 ;
if C2 = 1 then P(SAB);
V(S2);
Read file F ;
P(S2);
C2 := C2 – 1 ;
if C2 = 0 then V(SAB) ;
V(S2);
end;
parend;(4分)
end;
答案:解:
begin
S1,S2,SAB:semaphore;
C1,C2:integer;
S1 := 1;S2 := 1;SAB := 1;C1 := 0;C2 := 0;
parbegin
Process Ai (i = 1,2,3,...)
begin
P(S1);
C1 := C1 + 1 ;
if C1 = 1 then P(SAB);(3分)
V(S1);
Read file F ;
P(S1);
C1 := C1 – 1 ;
if C1 = 0 then V(SAB) ;
V(S1);
end;
Process Bi (i = 1,2,3,...)(3分)
begin
P(S2);
C2 := C2 + 1 ;
if C2 = 1 then P(SAB);
V(S2);
Read file F ;
P(S2);
C2 := C2 – 1 ;
if C2 = 0 then V(SAB) ;
V(S2);
end;
parend;(4分)
end;