试题与答案

在一个飞机订票系统中,多个用户共享一个数据库。多个用户可以同时查询,但若一个用户要订

题型:问答题

题目:

在一个飞机订票系统中,多个用户共享一个数据库。多个用户可以同时查询,但若一个用户要订票需更新数据库时,其余所有用户都不可以访问数据库。请画出用户查询与订票的逻辑框图。要求:当一个用户订票而需要更新数据库时,不能因不断有查询者的到来而使他长期等待。

答案:

参考答案:本题是典型的读者一写者问题。查询操作是读者,订票操作是写者,而且要求写者优先。
为了达到这一控制效果,可以引入一个变量rc,用于记录当前正在运行的读者进程数。每个读者进程进入系统后需对rc值加1。当rc值由0变为1时,说明是第一个读者进程进入,因此需要该读者进程对控制写者进程的信号量Srw进行P操作,以便与写者进程互斥运行:当rc值由非0值增加时,说明不是第一个读者进程,此时控制写者进程的信号量已经过P操作控制禁止写者进程进入,因此不需要再次对该信号量进行P操作。当读者进程退出时,需对rc做减1操作。如发现减1后rc值变为0,说明是最后一个读者进程退出,因此需要该读者进程对控制写者进程的信号量Srw进行V操作,以便写者进程能够进入。资源计数变量rc也是一个临界资源,需要用信号量Src对它进行互斥访问控制。为了提高写者的优先级,我们还增加了一个信号量s,用以在写进程到达时封锁其后续的读者进程。用户查询与订票的逻辑框图如下图所示。

试题推荐
微信公众账号搜索答案