我刚收到一个问题,但提到的答案似乎令人困惑。
Que.- Each Process Pi, i=1....9 is coded as follows
repeat
P(mutex)
{Critical section}
V(mutex)
forever
The code for P10 is identical except it uses v(mutex) in place of p(mutex). What is the largest number of processes that can be inside the critical section at any moment.
a) 1 b) 2 c) 3 d) None
我相信答案可以是3,因为任何一个Pi(i = 1到9)都可以在其CS中。一旦处理器上下文切换到P10,它就会发出一个互斥信号,它可以从Pi的另一个进程(i = 1..9)转到它的CS
但提到的答案是2.请建议。
由于
答案 0 :(得分:3)
答案是10。
假设最初互斥= 1.P1进入CS并设置互斥= 0;然后P10进入CS并设置互斥= 1。此后P1进入CS并设置互斥= 0。此时我们在CS中有3个进程。接下来假设P10退出,因此互斥= 1并且P2进入。然后再次假设P10进入。现在我们在CS中有4个进程(P0,P1,P2,P10)。 P10再次退出,这个过程一直持续到最后。最后,我们将在CS中拥有所有流程。
考虑到这些过程不能同时被调用多次。
答案 1 :(得分:0)
我认为应该是3
如果P0是调度然后mutex = 0,并且P0进入其CS,则假设互斥量值现在为1。现在假设上下文切换发生并且P10是调度为P10第一个语句是V互斥量值将变为1并且P10也将在其CS中此时此时间点2过程P0和P10在其CS中现在再次发生上下文切换并且假设P1是计划,然后它也将进入其CS,并且mutex的值= 0 现在,此时我们在CS P0,P1和P10中有三个进程,并且互斥量值为0.现在要使互斥值为1,这三个进程中的任何一个都必须调用P,这意味着它将从CS中出来。所以任何时刻时间最多只有3个过程可以在其cs
答案 2 :(得分:0)
正确的答案是2,以下是解释。
互斥锁的初始值= 1
case 1 - any one process among p1...p9 enters the critical section
通过调用P()将互斥锁的值设置为0,即它变为零,当互斥锁值为0时,不允许其他进程甚至不允许10进入CS。
case 2 - process p10 enters the critical section
mutex的值不会改变,因为调用V()trys来设置已经是1的互斥锁1的值。由于互斥锁的值为1,任何其他进程p1 ... p9都允许进入它的临界区,因此CS中任何时候的最大无过程都是2。
解决问题的关键是互斥锁可以采用的值只有0和1而没有其他值。
答案 3 :(得分:-1)
我认为答案应该是11(P0,P1 ...... P9和P10)。我们来看看为什么这样说,
表示P10 { V(互斥) {} CS V(互斥) }
考虑情况:
P0进入互斥锁阻止总进程= 1
P10进入互斥锁未阻止总进程= 2
P1进入互斥锁阻止总进程= 3
P10退出互斥锁未阻止总进程= 2
P2进入互斥锁阻止总进程= 3
P10进入互斥锁未阻止总进程= 4
P3进入互斥锁阻止总进程= 5
P10退出互斥锁未阻止总进程= 4
P4进入互斥锁阻止总进程= 5
P10进入互斥锁未阻止总进程= 6
P5进入互斥锁定总进程= 7
P10退出互斥锁未阻止总进程= 6
P6进入互斥锁阻止总进程= 7
P10进入互斥锁未阻塞总进程= 8
P7进入互斥锁定总进程= 9
P10退出互斥锁未阻止总进程= 8
P8进入互斥锁阻止总进程= 9
P10进入互斥锁未阻塞总进程= 10
P9进入互斥锁定总进程= 11