PV操作

299 阅读1分钟

例题

设有一个汽车售票大厅,可容纳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++;
}