题目
(10分) 某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一人通过。参观者的活动描述如下: cobegin 参观者进程i: ( … 进门; … 参观; … 出门; … ) coend 请添加必要的信号量和P,V [或wait(), signal()]操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。
(10分) 某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一人通过。参观者的活动描述如下: cobegin 参观者进程i: { … 进门; … 参观; … 出门; … } coend 请添加必要的信号量和P,V [或wait(), signal()]操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。
题目解答
答案
定义两个信号量 Semaphore empty = 500; //博物馆可以容纳的最多人数(2 分) Semaphore mutex= 1; //用于出入口资源的控制(2分) 参观者进程i; { ... P ( empty ); (1分) P( mutex ); (1分) 进门; V( mutex ); 参观; P ( mutex); (1分) 出门; V( mutex ); V( empty ); ... } coend
解析
步骤 1:定义信号量
定义两个信号量,一个用于控制博物馆内的人数,另一个用于控制出入口的互斥访问。
步骤 2:P(empty)操作
在参观者进程i中,首先执行P(empty)操作,以确保博物馆内的人数不超过最大容量。
步骤 3:P(mutex)操作
执行P(mutex)操作,以确保出入口资源的互斥访问。
步骤 4:进门操作
执行进门操作,表示参观者进入博物馆。
步骤 5:V(mutex)操作
执行V(mutex)操作,释放出入口资源,允许其他参观者进程访问。
步骤 6:参观操作
执行参观操作,表示参观者在博物馆内参观。
步骤 7:P(mutex)操作
执行P(mutex)操作,以确保出入口资源的互斥访问。
步骤 8:出门操作
执行出门操作,表示参观者离开博物馆。
步骤 9:V(mutex)操作
执行V(mutex)操作,释放出入口资源,允许其他参观者进程访问。
步骤 10:V(empty)操作
执行V(empty)操作,表示博物馆内的人数减少1,允许其他参观者进入博物馆。
定义两个信号量,一个用于控制博物馆内的人数,另一个用于控制出入口的互斥访问。
步骤 2:P(empty)操作
在参观者进程i中,首先执行P(empty)操作,以确保博物馆内的人数不超过最大容量。
步骤 3:P(mutex)操作
执行P(mutex)操作,以确保出入口资源的互斥访问。
步骤 4:进门操作
执行进门操作,表示参观者进入博物馆。
步骤 5:V(mutex)操作
执行V(mutex)操作,释放出入口资源,允许其他参观者进程访问。
步骤 6:参观操作
执行参观操作,表示参观者在博物馆内参观。
步骤 7:P(mutex)操作
执行P(mutex)操作,以确保出入口资源的互斥访问。
步骤 8:出门操作
执行出门操作,表示参观者离开博物馆。
步骤 9:V(mutex)操作
执行V(mutex)操作,释放出入口资源,允许其他参观者进程访问。
步骤 10:V(empty)操作
执行V(empty)操作,表示博物馆内的人数减少1,允许其他参观者进入博物馆。