3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get

简介: 3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 get

3 个进程 P1、P2、P3 互斥地使用一个包含 N(N > 0)个单元的缓冲区。P1 每次用 produce() 生成一个正整数,并用 put() 将其送入缓冲区的某一空单元中 ;P2每次用 getodd() 从该缓冲区中取出一个奇数,并用 countodd() 统计奇数的个数 ;P3 每次用geteven() 从该缓冲区中取出一个偶数,并用 counteven() 统计偶数的个数。请用信号量机制实现这 3 个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。

// 互斥信号量
mutex = 1;
// 共享内存中的偶数个数
even = 0;
// 奇数个数
odd = 0;
// 共享内存的剩余空间
empty = n;
p1(){
    while(true){
        p(empty);//等待有空位置
  num = produce();//生成正数
  p(mutex);//互斥
  put(num);//放入缓冲区
  v(mutex);//释放
  v(empty);//n中添加一个元素
  if(num % 2 == 0){
      v(even);//偶数增加
  }else{
      v(odd);//奇数增加
  }
    }
}
p2(){
    while(true){
  p(odd);//等待一个奇数
  p(mutex);//互斥
  getodd();//取出奇数
  countodd();//统计奇数个数
  v(mutes);//释放
  v(odd);//奇数个数减少
    }
}
p3(){
    while(true){
  p(event);//等待一个偶数
  p(mutex);//互斥
  geteven();//取出偶数
  counteven();//统计偶数个数
  v(mutes);//释放
  v(event);//偶数个数减少
    }
}
相关文章
|
3月前
|
供应链 安全 数据处理
操作系统高级议题:并发控制与进程互斥技术
操作系统高级议题:并发控制与进程互斥技术
77 0
|
4月前
|
算法 安全 调度
【操作系统】进程同步与进程互斥
【操作系统】进程同步与进程互斥
47 2
|
1月前
|
消息中间件 存储 安全
python多进程并发编程之互斥锁与进程间的通信
python多进程并发编程之互斥锁与进程间的通信
|
4月前
|
C++
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
【操作系统】信号量机制(整型信号量、记录型信号量),用信号量实现进程互斥、同步、前驱关系
115 6
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
有 3 个进程 P1、P2、P3 协作解决文件打印问题。P1 将文件记录从磁盘读入内存的缓冲区 1,每执行一次读一个记录 ;P2 将缓冲区 1 中的内容复制到缓冲区 2 中,每执行一次复制一个记录 ;
|
4月前
|
算法 安全 调度
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)
84 0
操作系统(8)---进程的同步与互斥以及信号量机制(万字总结~)(1)
|
4月前
|
存储 安全 Linux
【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念
【Linux】详解进程通信中信号量的本质&&同步和互斥的概念&&临界资源和临界区的概念
|
4月前
|
消息中间件 Linux
【linux进程间通信(二)】共享内存详解以及进程互斥概念
【linux进程间通信(二)】共享内存详解以及进程互斥概念
|
4月前
|
Unix Linux C语言
【进程OI】重定向的本质&&用户级缓冲区
【进程OI】重定向的本质&&用户级缓冲区

相关实验场景

更多