首页 > 解决方案 > 使用 Semaphore 确定三个进程的执行顺序并打印“AABC”

问题描述

P1、P2 和 P3 是执行各自任务的三个进程。它们应该使用信号量相互同步,以便无限次打印字符串“AABC”。确定所需的最小信号量及其初始值。还要确定应该在 P1、P2 和 P3 的代码中插入对该信号量的操作的位置。描述你的解决方案是如何工作的。

P1                   P2                   P3
while(true){         while(true){         while (true){
print(“A”);           print(“B”);          print("C");  
 }                      }                       }

我试图用三个信号量来回答这个问题。但不确定它是否正确。初始值 P=1,Q=-1,R=0

P1                P2                 P3
while(true){      while(true){       while(true){
wait(P)           wait(Q)             wait(R)
print("A")        print("B")          print("C")
signal(P)         signal(R)           signal(P)
signal(Q)          }                   }
 }   

标签: operating-systemsynchronization

解决方案


根据您的代码,也可以生成“AAABC”。这是不被接受的。


初始值 P=2,Q=-1,R=0。

P1:

while(true){            
wait(P)                        
print("A")                                    
signal(Q)                      
 }

P2:

while(true){            
wait(Q)                        
print("B")                 
signal(R)                                          
 }

P3:

while(true){            
wait(R)                        
print("C")                 
signal(P)                                          
 }

推荐阅读