上一小节讲了PV信号量的概念,还有进程同步、异步的概念,现在我们用实际的问题来使用PV信号量。
如下图,公共汽车上,司机和售票员各司其职。司机需要等售票员关好门之后才能启动车,售票员只有等司机停好车后才能开车门,两者必须配合默契,协调一致。
设置信号量Start来控制是否可以让司机启动汽车,初值为0;
设置信号量Open控制是否可以让售票员开启车门,初值为0;
这表示当前状态是汽车未启动且车门已经打开,不允许司机启动汽车,也不允许售票员开车门。
相关代码如下:
Seamphore Start,Open;
Start.value=0,Open.value=0
Cobegin
Process 司机()
{
While(1)
{
P(Start)
启动汽车
正常行驶
到站停车
V(Open)
}
}
Process 售票员()
{
While(1)
{
关闭车门
V(Start)
售票
P(Open)
开车门
}
}