• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >嵌入式开发 > 生产者消费者问题,为什么要互斥的使用缓冲池,而且缓冲池存在的意义是什么?

生产者消费者问题,为什么要互斥的使用缓冲池,而且缓冲池存在的意义是什么?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了生产者消费者问题,为什么要互斥的使用缓冲池,而且缓冲池存在的意义是什么?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 生产者消费者问题,为什么要互斥的使用缓冲池,而且缓冲池存在的意义是什么?
描述:

为什么生产者进程和消费者进程不同时使用缓冲池呢,临界资源只是缓冲区而已,互斥的使用缓冲区不就得了,我感觉缓冲池根本没有存在的意义。
而且如果按照操作系统书上写的那样:
wait(empty);wait(mutex);signal(mutex);signal(full);
wait(full);wait(mutex);signal(mutex);siganl(empty);
总是生产者和消费者之一先占用缓冲池,直到没有可用的缓冲区为止,才把使用缓冲池的权限交给另一个进程,这其实并不是同步操作的呀。并且不能写成:        
wait(mutex);wait(empty);signal(full);signal(mutex);
wait(mutex);wait(full);siganl(empty);signal(mutex);
因为当生产者或消费者进程在发现没有可用缓冲区的时候仍然占用着缓冲池权限,导致自身阻塞后,并不能让另一个进程把自身进程唤醒,从而造成进程死锁。
假如压根就没有对缓冲池权限的要求,上述情况也就不会发生了吧。例如写成这样:
wait(empty);signal(full);
wait(full);siganl(empty);

小弟初学操作系统经典进程的同步问题,可能想法有些偏激,请大神们不吝赐教,指点迷津。


解决方案1:

缓存池是为了解决同步设的啊,没有缓冲池时总是生产者生产商品,生产完了消费者才能消费,A执行完才能执行B。有了缓存池生产者和消费者可以并发执行,AB并发操作。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 生产者消费者问题,为什么要互斥的使用缓冲池,而且缓冲池存在的意义是什么?

相关文章

  • 2017-06-05 Zigbee串口通信
  • 2017-06-05 win2k和win98下访问isa,pci卡有什么区别吗?
  • 2017-06-05 求助!!交叉编译时出错
  • 2017-06-05 关于ds18b20一直显示-006的问题
  • 2017-06-05 tcpip协议详解TCP/IP详解卷1的协议域问题
  • 2017-06-05 如何制作网络协议安装程序
  • 2017-06-05 如何使用ARM开发板实现控制外部硬件
  • 2017-06-05 ov5642引脚
  • 2017-06-05 vxworks系统下如何终止一个任务???
  • 2017-06-05 ISE软件中绑定管脚有几种方式

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请问6针的1394端口转9针的RS232串口需要转换芯片吗?
    • 求助!谁能给我一个USB键盘驱动程序代码?
    • 关于ARM单片机SPI_DMA传输的疑问
    • 请问下面的说明如何理解(关于中断寄存器的)
    • C程序中内嵌汇编指令
    • 编译vxvorksbootloader/bsp报错
    • WEB服务器照书上打的程序,有点问题,大家帮我看看吧
    • 开发一套国产PLC在国内有市场吗?
    • 嵌入式系统硬件电路设计六大要点
    • 一些虚拟摄像头的原理是什么,如何编写的啊?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有