某博物馆最多可容纳500人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下:
cobegin
参观者进程i:
{ …
进门;
…
参观;
…
出门;
…
}
coend
请添加必要的信号量和P、V(或wait()、signal())操作,以实现上述过程中的互斥与同步。要求写出完整的过程,说明信号量的含义并赋初值。
解题过程具体如下:
semaphore mutex=1;//互斥的来使用出入口
semaphore empty=500;//博物馆中的空位数
void visitor()
{
while(true)
{
p(empty) ; //当博物馆还有空位的时才能进入博物馆
p(mutex);
进门; //进门操作是互斥的,一次只允许一个人进去,所以用PV操作包起来
v(mutex);
参观;
p(mutex);
出门; //这个操作也是互斥的,一次只允许一个人出去
v(mutex);
v(empty); //出门后释放一个空位
}
}