解:从图中可以知道,公共数据区的单元 Ai (i=1 , 2 , 3…)里存放的某月某日第i次
航班的现有票数,是 j (j=1 , 2 , 3…)个售票处共享的数据。因此,这些售票处对公共数
据区的单元 Ai (i=1 , 2, 3…)的操作不能同时进行。正因为如此,图中把对 Ai的这些操
作,用名为S的信号量上的P、V操作,保证它们互斥进行。这样处理都是正确的。
关键是当判定没有第i次航班的机票时,图里仅安排了打印“票已售完! ”的动作。这
样,第j售票处只有进入临界区的 P(S),而没有执行退出临界区的 V(S)。它没有退出临界区,
别的售票窗口也就无法再进入这个临界区。 所以,这种安排是不对的。 应该把所给图改成为
F图,这样就正确了。
第j售票处要订 第i航班的飞机票
按旅客要求找到Ai
i
I P(S)]
(进入公共数据监界区)
Rj=Ai;
(取出该航班现有票数)
Rj> 1?
(还有这个班次的飞机票?)
Y i
Rj=Rj -; Ai = Rj;
(进行数据修改)
I
丨V(S门
(退出公共数据监界区)
I
售出一张飞机票
正确的第j售票处的售票程序