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。
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。