当前位置: 首页 > news >正文

生产者-消费者问题

生产者-消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用

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

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

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

缓冲区是一种临界资源,各进程必须互斥访问

semaphore mutex=1;//互斥信号量,实现对缓冲区的互斥访问
semaphore empty=n;//同步信号量,代表空闲缓冲区的数量
semaphore full=0;//同步信号量,代表产品的数量
producer(){while(1){生产一个产品;P(empty);//消耗一个空闲缓冲区P(mutex);放入;V(mutex);V(full);//消耗一个非空缓冲区,代表增加了一个产品}
}
consumer(){while(1){P(full);//消耗一个产品P(mutex);取出;V(mutex);V(empty);//增加一个空闲缓冲区使用产品;}
}

互斥的P操作,一定要在实现同步的P操作之后,顺序不能颠倒

但是V操作可以随意交换顺序,不会导致进程阻塞

http://www.jsqmd.com/news/5959/

相关文章:

  • Manim实现闪电特效
  • QAction的使用
  • Gitee:中国开发者生态的数字化转型加速器
  • flow.tcl
  • 大模型提示词技巧Prompt Engineering,看这一篇就够了 - 知乎
  • Pandawiki接入飞书机器人全攻略:打造企业智能问答新体验
  • sg.测试 PySimpleGUI 取值方法
  • 剥开参数看本质:2025 年手机性能与处理器深度解析 - 详解
  • WPF 深入系列.2.布局体系.布局控件.StackPanel
  • HT-SBTC-2-10L 是成都恒利泰推出的 5–1000 MHz
  • Gitee DevOps:本土化基因驱动中国企业研发效能革命
  • 快速查看Navicat数据库连接密码实战
  • 华为发布开源超节点架构,以开放战略叩响AI算力生态变局 - 指南
  • 老旧系统接入统一认证
  • 每周读书与学习-初识JMeter 元件(三)
  • Playwright MCP浏览器自动化全攻略
  • 【IEEE出版、连续3届稳定EI检索】第四届能源互联网及电力系统国际学术会议(ICEIPS 2025)
  • 大内容 Python动漫信息管理系统 Django+Echarts 类型饼图 折线图分析 后台管理 智能推荐(源码)✅
  • 划分子网与连通性
  • 深入解析:从“硬件能力比拼”到“生活价值交付”,方太智慧厨房重构行业竞争内核
  • 题解:CF1548E Gregor and the Two Painters
  • Gitee DevOps:重塑中国软件开发效率的新范式
  • Gitee:中国开发者生态的崛起与数字化转型新动能
  • C语言数组与函数实践应用项目--扫雷游戏 - 指南
  • 悟空博弈框架深度研究:从技术架构到商业应用的全景分析——声明ai研究
  • 油猴脚本-自动刷新网页
  • PostgreSQL数据库查询表是否被锁,以及解锁表的办法
  • 用信号量机制实现互斥,同步,前驱
  • 详细介绍:HDFS和MapReduce——Hadoop的两大核心技
  • AxC杂题乱做