- 系统中有三个进程 GET 、 PRO 和 PUT ,共用两个缓冲区 BUF1 和 BUF2 。假设 BUF1 中最多可放 11 个信息,现已放入了两个信息; BUF2 最多可放 5 个信息。 GET 进程负责不断地将输入信息送入 BUF1 中, PRO 进程负责从 BUF1 中取出信息进行处理,并将处理结果送到 BUF2 中, PUT 进程负责从 BUF2 中读取结果并输出。试写出正确实现 GET 、 PRO 、 PUT 的同步与互斥的算法。
semaphore
empty1=9;// 空 buf1 的数目
full1=2; // 有数据的 buf1 的数目
empty2=5; // 空 buf2 的数目
full1=0; // 有数据的 buf2 的数目
mutex1=mutex2=1; // 互斥信号量
int main(){
Cobegin // 并发开始
GET();
PRO();
PUT();
Coend // 并发结束
return 0; }
//GET 进程
void GET () {
while(1)
{
…
wait(empty1);
wait(mutex1);
将信息送入 buf1;
signal(mutex1);
signal(full1);
…
}
}
//PRO 进程
void PRO () {
while(1)
{
wait(full1);
wait(mutex1);
从 buf1 中取出信息 ;
signal(mutex1);
signal (empty1);
wait(empty2);
wait(mutex2);
将信息送入 buf2;
signal(mutex2);
signal(full2);
}
}
//PUT 进程
void PUT () {
while(1)
{
wait(full2);
wait(mutex2);
从 buf2 中取出信息 ;
signal(mutex2);
signal (empty2);
}
- 三个进程P1、P2、P3互斥使用一个包含N(N>0)个单元的缓冲区。P1每次用produce0生成一个正整数并用putO送入缓冲区某一空单元中;P2每次用getoddO从该缓冲区中取出一个奇数并用countoddO统计奇数个数;P3每次用geteven)从该缓冲区中取出一个偶数并用counteven0统计偶数个数。请用信号量机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义(要求用伪代码描述)。
- 在一个仓库中可以存放A和B两种产品,要求:
1)每次只能存入一种产品。
2)A产品数量-B产品数量<M。
3)B产品数量-A产品数量<N。
其中,M、N是正整数,试用P操作、V操作描述产品A与产品B的入库过程。
- 某工厂有两个生产车间和一个装配车间,两个生产车间分别生产A、B两种零件,装配车间的任务是把A、B两种零件组装成产品。两个生产车间每生产一个零件后都要分别把它们送到专配车间的货架F1、F2上。F1存放零件A,F2存放零件B,F1和F2的容量均可以存放10个零件。装配工人每次从货架上取一个零件A和一个零件B后组装成产品。请用P、V操作进行正确管理。