问题 多项选择题

有一阅览室,读者进入时必须先在一张登记表上登记。该表中每个表项代表阅览室中的一个座位。读者离开时要消掉其登记信息。阅览室共有50个座位。登记表每次仅允许一位读者进行登记或注销。读者登记时,发现登记表满,他在阅览室外等待,直至有空位再登记进入。试用类Pascal语言和P、V操作,描述读者行为。

答案

参考答案:semaphore seats=E0, mutex=A;
cobegin
procedureEnter
{
while(TRUE)
{
p(seats);
p(mutex);
填写登记表;
进入阅览室阅读;
v(mutex);
}
}
procedureLeave
{
while(TRUE)
{
p(mutex);
消掉登记;
离开阅览室;
v(mutex);
v(seats);
}
}
Coend

解析: 读者的动作有两个,一是填表进入阅览室,此时要考虑阅览室里是否有座位,设置资源信号量seats,表示有多少空座位,初值为50;二是读者阅读完毕,离开阅览室,由于是读者的主动行为,不需要考虑阅览室内是否有读者,但出阅览室后需要释放座位。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。进阅览室和出阅览室都要在登记表进行登记,而登记表每次仅允许一位读者进行登记或注销,因此,需设置一个互斥信号量mutex,初值设为1。

单项选择题
单项选择题