某机场的机票候补系统规定,旅客到机场可以候补机票,若机票有空额则直接出票,若无票额时,候补机票的旅客按先到先得的方法进入候补队列,等待退票旅客退票。一旦有旅客退票,那么将唤醒第一个候补旅客,若没有等待的旅客则将空余票额加一,请用P、V操作实现上述过程。
【正确答案】:TyPedef int semaPhore;//定义信号量 SemaPhore mutex=1;//临界区互斥信号量,用于互斥 SemaPhore tickets=N;//空余票额的资源信号量,用于同步 Void standby_Passenger(Pi) {while(1) {P(tickets);//获取空票额数据,若无票则阻塞 P(mutex);//为保证互斥访问数据库 Sell_tickets(Pi);//出售 V(mutex);//释放信号量 } } Void refilnd_tickets(Pj) {while(1) {P(mutex);//为保证互斥访问数据库获取空票额数据,若无票则阻塞 refund_tickets(-Pj);//完成退票 V(mutex);//释放互斥量 V(tickets);//票额加一,若有阻塞进程则唤醒 } }