zoukankan      html  css  js  c++  java
  • 系统分析师案例分析知识点——进程同步问题

    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);
    }
    

      

      

  • 相关阅读:
    如何动态加载控件以及插件编程思想(C#)
    Web Services的魅力
    Remoting和Webservice的区别
    用Asp.Net c#写的采集小例子
    .net remoting范例
    C# 实现屏幕键盘 (ScreenKeyboard)
    初识用.NET Remoting来开发分布式应用(转)
    把页面以流的形式输出 在另外一个页面显示
    webservice的应用
    【表单】鼠标经过时获得焦点,获得焦点时选中文本
  • 原文地址:https://www.cnblogs.com/kaiblog/p/13084945.html
Copyright © 2011-2022 走看看