码迷,mamicode.com
首页 > 系统相关 > 详细

系统分析师案例分析知识点——进程同步问题

时间:2020-06-10 14:38:56      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:知识点   其他   方法   下场   har   含义   机制   修改   ==   

1. 在生产者和消费者问题中,mutex,empty,full信号量的作用是什么?如果将生产者和消费者问题中的两次wait操作和两次signal操作次序进行交换会产生什么问题?

解答:在生产者和消费者问题中,mutex信号量是互斥信号量,确保生产者和消费者对缓冲区资源的互斥访问。empty和full信号量是资源信号量,empty代表缓冲区中的空闲空间,full代表缓冲区中的产品数量,empty和full用来处理生产者和消费者之间的同步问题。

如果将生产者和消费者中的两次wait操作次序进行修改,则可能会发生死锁。可以考虑如下场景:缓冲区空间已满,这个时候生产者执行wait(mutex), wait(empty)操作尝试向缓冲区中放置产品,那么因为没有空闲资源该生产者进入等待状态。而其他的生产者和消费者在这个时候又无法获取mutex信号量使用临界区,此时就会发生死锁。如果将生产者和消费者的两次signal操作次序进行修改则不会发生死锁,只是资源的释放时机发生了改变。

2. p1, p2, p3 三个进程互斥使用一个包含N个单元的缓冲区。p1每次用使用produce()方法生成一个正整数并使用put()方法放入缓冲区中的一个空闲单元中。P2 每次用 getodd()从该缓冲区中取出一个奇数并用 countodd()统计奇数个数;P3 每次用 geteven()从该缓冲区中取出一个偶数并用 counteven()统计偶数个数。请用信号量 机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。

解答:缓冲区是一个互斥资源,因此设置信号量mutex。p1, p2, p3共享缓冲区,所以设置缓冲区共享信号量empty。p1, p2因为奇数放置和获取而同步,所以设置同步信号量odd。p1, p3因为偶数放置和获取而同步,所以放置同步信号量even。伪代码描述p1, p2, p3的同步问题如下所示:

semaphore mutex = 1; empty = N; odd = 0; even = 0;

P1:

while(true) {
      number = produce();
      P(empty);
      P(mutex);
      put();
      if(number % 2 == 0) {
        V(even);        
      } else {
        V(odd);
      }
}

P2:

while(true) {
  P(odd);
  P(mutex);
  getOdd();
V(mutex); V(empty); }

P3:

while(true) {
   P(even);
   P(mutex);
   getEven();
   V(mutex);
   V(empty);
}

  

  

系统分析师案例分析知识点——进程同步问题

标签:知识点   其他   方法   下场   har   含义   机制   修改   ==   

原文地址:https://www.cnblogs.com/kaiblog/p/13084945.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!