读者的动作有两个,一是填表进入阅览室,这时要考虑阅览室里是否有座位;一是读者阅读完毕,离开阅览室,这时的操作要考虑阅览室里是否有读者。读者在阅览室读书时,由于没有引起资源的变动,不算动作变化。
算法的信号量有三个:seats——表示阅览室是否有座位(初值为100,代表阅览室的空座位数);readers——表示阅览室里的读者数,初值为0;用于互斥的mutex,初值为1。
读者进入阅览室的动作描述getin:
while(TRUE){
P
(seats);
/*没有座位则离开*/
P(mutex)
/*进入临界区*/
填写登记表;
进入阅览室读书;
V(mutex)
/*离开临界区*/
V(readers)
}
读者离开阅览室的动作描述getout:
while(TRUE){
P(readers)
/*阅览室是否有人读书*/
P(mutex)
/*进入临界区*/
消掉登记;
离开阅览室;
V(mutex)
/*离开临界区*/
V(seats)
/*释放一个座位资源*/
}
本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。