例题
设有一个汽车售票大厅,可容纳300人购票。如果厅内不足300人,则允许进入,超过则在厅外等候;售票员一次只能给一个乘客服务,购票者买完票后就离开。用P、V操作描述乘客的购票过程。
可以使用信号量来解决这个问题。考虑到乘客不能同时进行购票的场景,我们需要同时维护mutex信号量用于控制当前正在购票的乘客数量。empty,wait分别记录大厅人数状态和等待人数状态
首先初始化三个信号量:
empty = 300 //可容纳乘客数,初始值为300
mutex = 1 //互斥量,控制buy的互斥访问
waiting = 0 //等待购票乘客数,初始值为0
buy{
p(waiting)
p(mutex)
// buy...
v(mutex)
v(empty)
}
wait(){
p(empty)
//wait
waiting++;
}