4.
佩奇、米老鼠、汤姆一起玩放水果的游戏。佩奇不停的往空盘子中放苹果米老鼠不停的取苹果,汤姆不停的取橘子。假设这个盘子最多能放的水果且他们三个不能同时取用。完成如下两问
请写出记录型信号量的wait和signal操作的定义(7分)。
请用信号量机制和wait和signal操作实现这三个朋友的同步、互斥活动,并说斤定义的信号量的含义。要求用伪码描述(8分)。
semaphore empty=10,apple=0,orange=0,mutex=1;
佩奇:
begin
repeat
wait(empty);
wait(mutex);
放入水果;
signal(mutex);
if(放入的是苹果) signal(apple);
else signal(orange);
until false
end
米老鼠:
begin
repeat
wait(apple);
wait(mutex);
取走苹果;
signal(mutex);
signal(empty);
吃苹果;
until false
end
汤姆:与第二个一致
二、读者-写者问题
1.
有一座东西方向的独木桥;用P.V操作实现:
(1)每次只允许一个人过桥;
(2)当独木桥上有行人时,同方向的行人可以同时过桥,相反方向的人必须等待。
(3)当独木桥上有自东向西的行人时,同方向的行人可以同时过桥,从西向东的方向,只允许一个人单独过桥。(此问题和读者与写者问题相同,东向西的为读者西向东的为写者)。
(1)
semaphore mutex=1;
begin
repeat
p(mutex);
过桥;
v(mutex);
until false
end
(2)
设信号量:
MUTEX=1(东西方互斥)
MD=1 (东向西使用计数变量互斥)
MX=1(西向东使用计数变量互斥)
设整型变量:
CD=0(东向西的已上桥人数)
CX=0 (西向东的已上桥人数)
从东向西:
P(MD);
if(CD=0) P(MUTEX);
CD=CD+1;
V(MD);
过桥;
P(MD);
CD=CD-1;
if(CD=0) V(MUTEX);
V(MD);
从西向东:
P(MX);
if(CX=0) P(MUTEX);
CX=CX+1;
V(MX);
过桥;
P(MX);
CX=CX-1;
if(CX=0) V(MUTEX);
V(MX);
(3)
semaphore MUTEX=1,MD=1,CD=0;
从东向西:
P(MD);
if(CD=0) P(MUTEX);
CD=CD+1;
V(MD);
过桥;
P(MD);
CD=CD-1;
if(CD=0) V(MUTEX);
V(MD);
从西向东:
P(MUTEX);
过桥
V(MUTEX);
标签:MD,复习,signal,CD,过桥,MUTEX,mutex,wait
From: https://blog.csdn.net/mingtiaojiahao/article/details/143751769