某博物馆最多可容纳 500 人同时参观,有一个出入口,该出入口一次仅允许一个人通过。参观者的活动描述如下:
进门:
参观;
出门:
请添加必要的信号里和P、V(或 wait()、signal())操作,以实现上述过程中的互斥与
同步。要求写出完整的过程,说明信号里的含义并赋初值。
// 代码如下
Semaphore empty=500; //博物馆可以容纳的最多人数
Semaphore mutex =1; //用于出入口资源的控制
cobegin
参观者进程i:
{
…
P(empty);
P(mutex);
进门;
V(mutex);
参观;
P(mutex);
出门;
V(mutex);
V(empty);
…
}
coend
桌子上有一只盘子,最多可容纳2个水果,每次只能放入或取出一个水果。爸爸专向盘子放苹果,妈妈专向盘子中放桔子;两个儿子专等着吃
盘子中的桔子,两个女儿专等着吃盘子中的苹果。请分析这些进程之间的关系,并用P、V操作描述这些进程的上述关系。
下面展示一些 内联代码片
。
代码如下
(1)爸爸、妈妈、儿子、女儿四个角色之间的进程互斥
用mutex来表示
(2)对于爸爸和妈妈来说,每次放水果之前要确认盘子里面是否满了
用full表示盘子里面水果的数量;
(3)对于儿子来说,每次取桔子之前都要确认盘子里面有没有桔子
用orange来表示盘子里面桔子的数量;
(4)对于女儿来说,每次取苹果之前都要确认盘子里面有没有苹果
用apple来表示盘子里面苹果的数量;
semaphore full=2,mutex=1,orange=0,apple=0;
void father()
{
while(TRUE)
{
P(full);
P(mutex);
放苹果;
V(mutex);
V(apple);
}
}
void mother()
{
while(TRUE)
{
P(full);
P(mutex);
放桔子;
V(mutex);
V(orange);
}
}
void son1(/son2) ()
{
while(TRUE)
{
P(orange);
P(mutex);
取桔子;
V(mutex);
V(full);
}
}
void daughter1(/daughter2) ()
{
while(TRUE)
{
P(apple);
P(mutex);
取苹果;
V(mutex);
V(full);
}
}
void main()
{
cobegin
father();mother();daughter1();
daughter2();son1();son2();
coend
}