谁能给我解释一下吗?
在下面的代码中,四个进程使用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将在启动时立即休眠,因为启动时无法获取T源。进程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永远不会同时被完全获得。
我们不知道将打印多少个b,但我们可以说'A'将打印3次。