美文网首页
生产者和消费者问题

生产者和消费者问题

作者: 我是聪 | 来源:发表于2021-07-23 21:28 被阅读0次

    生产者和消费者问题

    问题简述

    组成

    • 系统中有一组生产者和消费者进程

    • 生产者

      • 生产者将产品放入缓冲区
    • 消费者

      • 消费者进程每次从缓冲区中取出一个产品
    • 缓冲区

      • 初始为空,大小为n的缓冲区
      • 临界资源,各进程必须互斥访问

    信号量PV操作分析步骤

    1 关系分析

    • 找出题目中描述的各个进程分析他们之间的同步、互斥关系

    2 整理思路

    • 根据各进程的操作流程确定PV操作的大致顺序

    3 设置信号量

    • 设置需要的信号量,并根据 题目条件确定信号量初始值

      • 互斥信号量一般为1
      • 同步信号量要看对应资源的初始值

    举例

    • 信号量设置

      • 同步信号量

        • 空闲缓冲区的数量

          • semaphore mutex = n
        • 非空闲缓冲区的数量

          • semaphore mutex = 0
      • 互斥信号量

        • 对缓冲区的互斥访问

          • semaphore mutex = 1
    • 生产者进程和消费者进程实现

      • 生产者


        image.png
      • 消费者


        image.png
    • 能否改变PV顺序?

      • 举例

        • 生产者


          image.png
        • 消费者


          image.png
    - 分析
    
        - 前提
    
            - 此时缓冲区已经放满产品
    
                - empty=0
                - full=n
    
        - 生产者
    
            - 先使mutex=0
            - 再执行P(empty)
    
                - 由于empty=0
                - 生产者被阻塞
    
        - 消费者
    
            - 消费者进程执行
    
                - mutex为0
                - 消费者也被阻塞
    
        - 结果 
    
            - 死锁
    
    - 总结
    
        - 实现互斥的P操作一定要在实现同步的P操作之后
    

    相关文章

      网友评论

          本文标题:生产者和消费者问题

          本文链接:https://www.haomeiwen.com/subject/jawpmltx.html