1. 设自行车生产车间有两个货架,货架 A 可以存放 8 个车架,货架 B 可以存放 20 个车轮;又设
有 4 个工人,他们的活动是重复劳动,分别为:工人 1 加工一个车架放入货架 A 中;工人 2、3
分别加工车轮放入货架 B 中(每人每次放入 1 个车轮);工人 4 从货架 A 中取一个车架,再从
货架 B 中取两个车轮,组装成一辆自行车。试用 PV 操作实现四个工人的合作,写出同步算法。
【分析】信号量 Aempty 表示货架 A 的空位数,其初值为 8;信号量 Afull 表示货架 A 上存放的
车架数,其初值为 0;信号量 Bempty 表示货架 B 的空位数,其初值为 20;信号量 Bfull 表示货
架 B 上存放的车轮数,其初值为 0;信号量 mutex 用于互斥(初值为 1)。
解:
BEGIN
semaphore Aempty,Bempty,Afull,Bfull,mutex;
Aempty := 8;Bempty := 20;Afull := 0;Bfull := 0;mutex :=1;
PARBEGIN
Worker1:BEGIN
L1:生产 1 个车架;
P(Aempty); //测试货架 A 是否有空位置
P(mutex); //互斥使用货架 A
车架放到货架 A;
V(Afull); //货架 A 上的车架数增 1,必要时唤醒等待的进程
V(mutex);
goto L1;
END
Worker2、3:BEGIN
L2:生产 1 个车轮;
P(Bempty); //测试货架 B 是否有空位置
P(mutex); //互斥使用货架 B
车轮放到货架 B;
V(Bfull); //货架 B 上的车轮数增 1,必要时唤醒等待的进程
V(mutex);
goto L2;
END
Worker4:BEGIN
L3:P(Afull); //测试货架 A 上是否有车架
P(Bfull);P(Bfull); //测试货架 B 上是否有 2 个车轮
P(mutex);
取 1 个车架;取 2 个车轮;
V(Aempty); //货架 A 空位置增 1
V(Bempty);V(Bempty);//货架 B 空位置增 2
V(mutex);
组装成一辆自行车;
goto L3;
END
PAREND
END
评论0