生产者-消费者问题【操作系统学习笔记】

22.生产者-消费者问题

🍅问题分析

  • 系统中有一组生产者进程和一组消费者进程,消费者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注:这里的“产品”理解为某种数据)

  • 生产者,消费者共享一个初始为空,大小为 n 的缓冲区

  • 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待

  • 只有缓冲区不空时,消费者才能从中取出产品,否则必须等待

  • 缓冲区是临界资源,各进程必须互斥地访问(防止前一个数据被后一个数据覆盖)

  • 考试中便是利用 信号量机制(P,V操作)实现生产者,消费者进程的这些功能

    信号量机制可实现互斥,同步,对一类系统资源的申请和释放

🍅PV 操作题目的解题思路:

  1. 关系分析。找出题目中描述的各个进程,分析它们之间的同步,互斥关系
  2. 整理思路。根据各进程的操作流程确定 P,V 操作的大致顺序
    • 生产者每次要消耗(P)一个空闲缓冲区,并每次生产(V)一个产品
    • 消费者每次要消耗(P)一个产品,并释放一个空闲缓冲区(V)
    • 往缓冲区 放入/取走 产品需要互斥
  3. 设置信号量。设置需要的信号量,并根据题目条件确定信号量初值。(互斥信号量初值一般为 1同步信号量的初始值要看对应资源的初始值是多少
    • **实现互斥操作的P操作一定要在实现同步的P操作之后!**否则会出现 死锁
    • 而 V 操作不会导致进程堵塞,因此两个 V 操作顺序可以交换

用信号量 实现互斥在同一进程中进行 一对 PV 操作

实现两进程的同步关系,是在其中一个进程中执行 P,另一个进程中执行 V

🍅总结

  • 生产者消费者问题是一个互斥,同步的综合问题
  • 对于初学者来说,最难的是发现题目中隐含的两队同步关系
  • 有时候是消费者需要等待生产者生产,有时候是生产者要等待消费者消费,这是两个不同的“一前一后问题”,因此也需要设置两个同步信号量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值