4个进程的信号量执行
任何人都可以为我解释这个吗?4个进程的信号量执行
在以下代码中,四个进程使用printf
产生输出,并使用三个信号量R
,S
和T
进行同步。我们假设printf
不会导致上下文切换。
/* initialization */
Semaphore R=1, S = 3, T = 0;
/* process 1 */
while(true) {
P(S);
printf('A');
}
/* process 2 */
while(true) {
P(T);
printf('B');
printf('C');
V(T);
}
/* process 3 */
while(true) {
P(T);
printf('D');
V(R);
}
/*process 4 */
while(true) {
P(R);
printf('E');
V(T);
}
当这组进程运行时会打印多少个A和B?
进程1与其他进程无关,因为它只是获取S,并且什么都不释放。它会打印'A'3次,并且会永久睡眠。
方法2 & 3将立即在启动睡眠,因为Ť源不可获得在起动。过程4将获取最后一个R并释放一个T.此释放将唤醒进程2或3.在下一个循环中,进程4将休眠,因为没有R。
到目前为止,我们有:R = 0,S = 0,T = 1
假设T的释放唤醒的进程2,然后将收购回来的T,打印 'BC',会释放回一个T.这释放将唤醒睡眠过程3在接下来的循环中,处理2将睡眠,因为流程3取得的T.
方法3将使用T,将打印一个“d”,会释放一个R. R的这个版本将把第二,第三和第四个进程放到无限循环中。因为R和T永远不会同时被完全获得。
我们无法知道有多少烧烤将被打印出来,但是我们可以说“A”将被打印3次。
非常清楚。非常感谢。 –
不客气。 –
请格式化您的代码。这是'c'还是'java'? –
这是一种伪代码 –
认真!很难阅读和理解你在说什么。请看看[如何创建一个最小化,完整和可验证的示例](http://*.com/help/mcve) – mmushtaq