主观题:h400.假定有一个成品仓库,总共能存放8台成品,生产者进程把生产成品放入仓库,消费者进程从仓库中取出成品消费。为了防止积压......
假定有一个成品仓库,总共能存放8台成品,生产者进程把生产成品放入仓库,消费者进程从仓库中取出成品消费。为了防止积压,仓库满时就停止生产。由于仓库搬运设备只有一套,故成品的存入和取出只能分别进行,试用P、V操作来实现该方案。
答案:解:
semaphore mutex, empty, full ;
semaphore mutex, empty, full ;
mutex=1; //互斥信号量
empty=8; //生产者进程的同步信号量
full=0; //消费者进程的同步信号量
parbegin
process Pi //生产者进程(3分)
{
while (1) {
生产一个成品x;
P(empty) //看看仓库是否还有空间可放成品
P(mutex); //互斥使用搬运设备
用搬运设备将成品放入仓库;
V(full); //仓库中成品数增1(可能唤醒一个消费者)
V(mutex);
}
}
process Cj //消费者进程(3分)
{
while (1) {
P(full) //看看仓库是否有成品
P(mutex); //互斥使用搬运设备
用搬运设备将成品从仓库取出;
V(emtpy); //仓库中可放成品数增1(可能唤醒一个生产者)
V(mutex);
}
}
parend(4分)
答案:解:
semaphore mutex, empty, full ;
semaphore mutex, empty, full ;
mutex=1; //互斥信号量
empty=8; //生产者进程的同步信号量
full=0; //消费者进程的同步信号量
parbegin
process Pi //生产者进程(3分)
{
while (1) {
生产一个成品x;
P(empty) //看看仓库是否还有空间可放成品
P(mutex); //互斥使用搬运设备
用搬运设备将成品放入仓库;
V(full); //仓库中成品数增1(可能唤醒一个消费者)
V(mutex);
}
}
process Cj //消费者进程(3分)
{
while (1) {
P(full) //看看仓库是否有成品
P(mutex); //互斥使用搬运设备
用搬运设备将成品从仓库取出;
V(emtpy); //仓库中可放成品数增1(可能唤醒一个生产者)
V(mutex);
}
}
parend(4分)