用4个进程执行信号量



谁能给我解释一下吗?

在下面的代码中,四个进程使用printf产生输出,并使用三个信号量R, ST进行同步。我们假设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次。

最新更新