考虑一个单处理器系统同时执行两个进程P和Q.每个进程执行下面列出的代码,处理P - 过程P,并处理Q - 过程Q.两个进程在很短的时间内到达,但没有可以假设他们开始执行的时间和他们的相对速度。下面代码中从A到K使用的所有语句都是原子的,即。他们要么完全执行,要么根本不执行。通过两个二进制信号量S1和S2同步进程的执行。信号量S1初始化为1,信号量S2初始化为0.进程执行的代码如下:
procedure P
begin
A;
wait(S1);
B;
signal(S1);
C;
D;
signal(S2);
E;
end
procedure Q
begin
F;
wait(S1);
G;
H;
J;
signal(S1);
wait(S2);
K;
end
a。为陈述A至K提供至少四种可能的执行命令。
A,C,d,E,K
A,d,C,E,K
F,C,d,E,K
女,d,C,E,K
湾在给定的例子中,每个信号量S1和S2的功能是什么?
S1 – used for waiting
℃。语句E是否可以在语句F之前执行?证明你的答案。
是的,(但我不确定,有人可以确认吗?)
d。语句K是否可以在语句A之前执行?证明你的答案。
答案 0 :(得分:0)
一个。我想知道为什么你遗漏了B,F,G,H和J的陈述。你认为他们没有被处决吗?我想,一旦你回答了b,你就可以轻松回答。
湾所有信号量都可以等待,但这就是它们的工作方式,而不是它们的用途。你可以说得更详细点吗?信号量可以用于同步(foo必须在bar之后发生)和排除(在这两个代码段之间,一次只能执行一个)。您认为这两个信号量在这里使用的是什么?
℃。 E可能需要在F之前执行什么?这种情况存在吗?或者,从另一个角度来看:在F之前保持E执行需要什么?这种情况出现了吗?
d。见c。
这是一个信号量,用于确保在foo之后发生条形码:
S = 0
process 1:
foo
signal(S)
process 2:
wait(S)
bar
这是一个信号量,用于确保一次只执行两部分代码中的一部分:
S = 1
process 1:
wait(S)
foo
signal(S)
process 2:
wait(S)
bar
signal(S)
你看到了区别吗?重新检查作业中的代码,看看它现在是否更有意义。