若某航空公司飞机订票系统有n个订票终端,系统为每个订票终端创建一个售票终端进程。假设Pi(i=1,2,…,n)表示售票终端进程,Hj(j=1,2,…,m)表示公共数据区,分别存放各个航班现存票数,Temp为工作单元。PJ进程工作流程如图所示,a、b和c处将执行P操作和V操作,则图中a、b和c应填入 ( ) 。
- A.P(S)、V(S)和V(S)
- B.P(S)、P(S)和V(S)
- C.V(S)、P(S)和P(S)
- D.V(S)、V(S)和P(S)
正确答案及解析
正确答案
A
解析
这是一道考查利用P、V操作实现进程间同步和互斥工作综合理解题。由于"系统为每个订票终端创建一个售票终端进程","Hj(j=1,2,…,m)表示公共数据区,分别存放各个航班现存票数",可见公共数据区Hj是一个临界资源,最多允许一个终端进程使用,因此需要设置一个互斥信号量S,初值为1。售票终端进程Pi先按照定票要求找到对应公共数据区Hj,接着执行P(S)操作,用于检查是否有其他售票终端进程正在使用公共数据区Hj。若有,即执行该操作前S值等于0,则本售票终端进程进入等待状态。若没有,即执行该操作前S值等于1,则将S值减1后将公共数据区Hj值复制给工作单元Temp。若Temp值大等于1,即表示该公共数据区Hj中相应航班有剩余票数,则将Temp值减1后复制给相应公共数据区Hj,然后执行V(S)操作,表明该售票终端进程交出公共数据区Hj使用权,并唤醒其他进入等待状态售票终端进程。最后售票终端进程输出一张相应航班飞机票。若Temp值小于1,即表示该公共数据区Hj中已没有相应航班飞机票,则该售票终端进程执行V(S)操作,交出公共数据区Hj使用权,并唤醒其他进入等待状态售票终端进程。最后售票终端进程输出"票已售完"提示信息。