问答题 假定一个阅览室最多可容纳100人,读者进入和离开阅览室时都必须在阅览室门口的一个登记表上进行登记,而且每次只允许一人进行登记操作。用信号量实现该过程。
【正确答案】
【答案解析】读者有任意多个,但进入阅览室读最多为100人,为此可设一个信号量s,代表空座位的数目;另登记表为临界资源,需设一个用于互斥的信号量mutex,防止2个及2个以上的读者进程同时对此表访问。每个读者的动作包括进入、阅读、离开。
struct semaphore:s,mutex=100,1;
cobegin
void readeri(void)(i=1,2,...,k) {
while(TRUE) {
P(s);
P(mutex);
查登记表,置某座位为占用;
V(mutex);
...
reading;
...
P(mutex);
查登记表,置某座位为空;
V(mutex);
V(s);
}
}
coend