我对这些过程的输出感到非常困惑。任何人都可以帮我找到序列的可能开始吗?
semaphore mutex = 1;
semaphore times_a = 2;
semaphore times_b = 0;
A:
repeat forever:
P(times_a)
P(mutex)
<A1>
V(mutex)
V(times_b)
B:
repeat forever:
P(times_b)
P(mutex)
<B1>
V(mutex)
V(times_a)
A和B的并发执行产生 一个无限的序列和。哪一个 一个是序列唯一可能的开始:
答案 0 :(得分:1)
答案应该是
3. A1, B1, A1, B1, A1, B1, A1, B1, A1, ...
为了更好地理解这个问题,我会强调这些要点。
当我们看到代码时,我们可以理解输出的特性,
(no of A1) > (no of B1)
。因为至少需要一个专用'A'循环才能启动'B'循环。(no of A1) ≤ (no of B1 + 2)
。因为在没有'B'循环支持的情况下可以运行的'A'循环的最大量是2。即(no of B1) < (no of A1) ≤ (no of B1 + 2)
从第一部分开始,您可以丢弃(4)。 从第二部分开始,您可以放弃(1)和(2)。
我想你能理解我的解释。请提出问题。 :))