试用信号灯实现如图所示的进程同步关系
信号量的个数要等于=具有直接前驱的进程个数
P2,P3,P4,P5这些进程有前驱,所以设S2=S3=S4=S5=0
因为P1执行完,P2,P3,P4才能执行
因为P1没有直接前驱,所以直接释放P2.P3.P4的信号量S2,S3,S4
P1
{
V(S2)
V(S3)
V(S4)
}
P2想要执行,得先让P1执行完,所以需要申请S1
P2执行完可以释放S2
P2
{
P(S1)
V(S2) #这里可写可不写
}
P3想要执行,得先让P1执行完,所以需要申请S1
P3和P4有共同后继,P3或者P4任意进程释放S5
P3
{
P(S1)
}
P4想要执行,得先让P1执行完,所以需要申请S1
P4
{
P(S1)
V(S5)
}
P5想要执行,得先申请S3,S4
P5可以释放S5
{
P(S3)
P(S4)
V(S5)
}
哲学家进餐问题,五个进程,五只筷子
semaphore S1=S2=S3=S4=S5=1
P1拿起S1、S2,释放S1,S2