2.有一个阅览室,共有50个座位,读者进入时必须先在一张登记表上登记,该表为每

来源:百度知道 编辑:UC知道 时间:2024/06/14 09:04:12
2.有一个阅览室,共有50个座位,读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名等,读者离开时要消掉登记的信息,试问:
(1)为描述读者的动作,应编写几个程序,设置几个进程?
(2)试用PV操作描述读者进程之间的同步关系。

解答:设私有信号量seats为阅览室的空座位数,初值为50;私有信号量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) /*释放一个座位资源*/

对不起