1、飞机票订票系统201526706052 李悠201526706077 邹雨薇201526706029 李思琪题目分析飞机票订票系统,提供给多个用户共享一个订票数据库,并允许多个用户同时查询该数据库。但是不允许查询者和订票者同时访问共享对象。于是我们引入一个 rcount,用于记录当前正在运行的查询者进程数,以及查询互斥信号量 rmutex和订票互斥信号量 wmutex。当一个查询者进入系统后, rcount+1.当 rcount由 0变为 1,说明第一个查询者进程进入,因此对 wmutex做 P操作。以便与订票者进程互斥运行;当 rcount为非零时,则不需要再做 P操作。当查询者进程退出时,
2、要对 rcount做减 1操作。减 1后 rcount如果变为 0,说明是最后一个查询者进程退出。因此要对 wmutex进行V操作,以便订票者进程能够进入。程序描述如下:运行代码Semaphone rmutex=wmutex=r=w=1;/加入 r, w两个信号量 实现订票者优先Int rcount=0,wcount=0;Seacher()while (1)P(r);/先检查有无订票者进程存在P(rmutex);If(rcount=0)P(w);rcount=rcount+1;V(rmutex);V(r);查询数据;P(rmutex);Rcount=rcount-1;If(rcount=0)V(w);/无查询者进程存在V(rmutex); Order()while(1) p(wmutex);If(wcount=0)p(r);/第一个订票者进程进入后不允许后续查询进入wcount=wcount+1;v(wmutex);p(w);用数据库订票;V( w);wcount=wcount-1;IF(wcount=0)v(r);/没有订票者,允许查询者进入v(wmutex); 谢谢!