计算机操作系统原理
某杂技团进行走钢丝表演,在钢丝的A,B两端各有n名演员(n>1)在等待表演.只要钢丝上无人时便允许一名演员从钢丝的一端走到其一端.现要求两端的演员交替地走钢丝,且A端的一...
某杂技团进行走钢丝表演,在钢丝的A,B两端各有n名演员(n>1)在等待表演.只要钢丝上无人时便允许一名演员从钢丝的一端走到其一端.现要求两端的演员交替地走钢丝,且A端的一名演员先开始.请问,把一名演员看作一个进程时,怎样用PV操作来进行控制?请写出能进行正确管理的程序
展开
4个回答
2013-07-31
展开全部
在本题中,A,B端的演员(进程)共用一条钢丝(可用资源或信号量的缓冲区)
钢丝上一次只能通过一个演员。当钢丝上为空时,
A端可通过一个演员,这时B端的第一个演员等待,
重复过程,A,B两端N个演员全部通过,
设缓冲区的编号为1~z-1,定义两个指针in和out,它们分别是A端演员进程和B端演员进程使用的指针,指向下一个可用的缓冲区。
设置两个信号量分别为Gs 和Gsfull
int Gs=1; /*钢丝是否为空,缓冲区空了,初始值为1*/
int Gsfull=0; /*钢丝是否有人,缓冲区满了,初始值为0*/
main()
{
cobegin
int n=10
int i=1
while(i<=n)
{
i++;
Ags();
Bgs();
}
coend
}
/*A端演员进程*/
Ags()
{
while(1)
{
P(Gs);
A端演员上钢丝绳;
in=(in+1)mod z;
V(Gsfull);
}
}
/*B端演员进程*/
Bgs()
{
while(1)
{
P(Gsfull);
B端演员上钢丝绳;
out=(out+1)mod z;
V(Gs);
}
}
}
钢丝上一次只能通过一个演员。当钢丝上为空时,
A端可通过一个演员,这时B端的第一个演员等待,
重复过程,A,B两端N个演员全部通过,
设缓冲区的编号为1~z-1,定义两个指针in和out,它们分别是A端演员进程和B端演员进程使用的指针,指向下一个可用的缓冲区。
设置两个信号量分别为Gs 和Gsfull
int Gs=1; /*钢丝是否为空,缓冲区空了,初始值为1*/
int Gsfull=0; /*钢丝是否有人,缓冲区满了,初始值为0*/
main()
{
cobegin
int n=10
int i=1
while(i<=n)
{
i++;
Ags();
Bgs();
}
coend
}
/*A端演员进程*/
Ags()
{
while(1)
{
P(Gs);
A端演员上钢丝绳;
in=(in+1)mod z;
V(Gsfull);
}
}
/*B端演员进程*/
Bgs()
{
while(1)
{
P(Gsfull);
B端演员上钢丝绳;
out=(out+1)mod z;
V(Gs);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询