栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

生产者消费者问题

生产者消费者问题

文章目录
  • 14、生产者消费者问题
    • 14.1、描述
    • 14.2、分析
    • 14.3、实现
    • 14.4、总结

14、生产者消费者问题 14.1、描述
  1. 系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注: 这里的“产品”理解为某种数据)
  2. 生产者、消费者共享一个初始为空、大小为n的缓冲区。
  3. 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
  4. 只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。
  5. 缓冲区是临界资源,各进程必须互斥地访问。


14.2、分析
  1. 缓冲区是一个临界资源,各个进程必须互斥地访问。
  2. 当缓冲区满的时候,生产者必须要等消费者从缓冲区取走产品之后才能继续生产。(一前一后)。
  3. 当缓冲区空的时候,消费者必须要等生产者将产品放入缓冲区之后才能继续进行消费。(一前一后)。

  4. 生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,它们也是同步关系。
  5. 根据各进程的操作流程确定P、V操作的大致顺序。
    生产者每次要消耗(P)一个空闲缓冲区,并生产(V)一个产品。
    消费者每次要消耗(P)一个产品,并释放一个空闲缓冲区(V)。
    往缓冲区放入/取走产品需要互斥。
  6. 设置信号量。设置需要的信号量,并根据题目条件确定信号量初值。( 互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
14.3、实现
  1. 生产者在生产之前要检查缓冲区,需要消耗一个缓冲区,进行一个P操作。同时生产之后要对产品进行一个V操作。此时增加一个产品。
  2. 消费者在消费之前,要进行一个对产品的P操作,需要消费一个产品;从缓冲区取走一个产品之后要对缓冲区资源进行一个V操作,将缓冲区的一个资源恢复。
  3. 缓冲区是临界资源,各个线程必须互斥进行访问。(生产者在放产品进入缓冲区以及消费者从缓冲区取产品)。
  • 实现互斥的P操作一定要在实现同步的P操作之后。
14.4、总结

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号