进程同步问题

本文详细介绍了在多进程环境中实现同步与互斥的算法。通过GET、PRO、PUT进程间的互动,展示了如何利用信号量机制管理共享资源,确保数据的一致性和进程的有序执行。同时,探讨了在特定条件下的产品入库流程和装配车间的管理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 系统中有三个进程 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操作进行正确管理。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值