发布网友 发布时间:2024-04-21 09:42
共1个回答
热心网友 时间:2024-04-21 18:03
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。