1.问答题:有一个文件F,有A,B两组进程共享这个文件,同组的进程可以同时读文件F,但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读,
解:定义两个计数器C1,C2,分别记录A组和B组中读文件的进程数,三个信号量S1,S2,SAB,其中S1用于通知A组进程已经有B组进程在读文件F了,S2用于通知B进程已经有A进程在读文件F了,SAB用于实现对共享变量C1和C2以及临界区的互斥访问.
begin
var S1,S2,SAB:semaphore
=
1
,
1
,
1
;
C1,C2:integer
=
0
,
0
;
process A
-
i(i
=
1
,
2
)
begin
repeat
P(SAB);
C1
=
C1
+
1
;
if
(C1
=
1
) then P(S2);
V(SAB);
读文件F;
P(SAB)
C1
=
C1
-
1
;
if
(C1
==
0
)V(S2)
V(SAB)
until
false
end

process B
-
i(i
=
1
,
2
)
begin
repeat
P(SAB);
C2
=
C2
+
1
;
if
(C2
=
1
) then P(S1);
V(SAB);
读文件F;
P(SAB)
C2
=
C2
-
1
;
if
(C2
==
0
)V(S1)
V(SAB)
until
false
本文探讨了在操作系统中如何实现A、B两组进程共享文件的并发访问控制。通过设置计数器C1和C2,以及信号量S1、S2和SAB,确保同一组进程可以同时读取文件,而不同组的进程在有其他组进程读取时被阻塞,从而实现并发访问的安全性。
最低0.47元/天 解锁文章
3316

被折叠的 条评论
为什么被折叠?



