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

Linux----生产者与消费者

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux----生产者与消费者

生产者与消费者
  • 模型场景
    • 分析:
    • 编程流程:
      • 生产者同步流程
      • 消费者同步流程
  • 代码实现
    • 主函数
    • 生产者线程函数
    • 消费者线程函数

模型场景

分析:

缓冲区buff中存放数据
生产者和消费者数目不固定,生产者向缓冲区写入数据,一次写入一个整形,消费者从缓冲区读数据,一次读一个并打印。

生产者写数据时生产者就不可以读取,反之亦然。因此需要互斥锁
多个生产者不可以同时写数据,多个消费者也不可以同时读数据。所以也需要互斥锁
生产者有空间才可以写,没有空间就不能写;消费者有数据才可以读,没有数据就不可以读。所有使用一个信号量不能完成

编程流程: 生产者同步流程

需要循环向buff写入数据:
1.P(sem_empty);判是否可以进行P操作,若可以代表缓冲区有空闲空间,此时空闲空间减一

必须先P操作后加锁:若没有剩余空间就不用加锁了

2.lock():给缓冲区加锁,加锁成功就向缓冲区写数据
3.buff[i] = n :向buff中写数据
4.unlock():写完数据,给缓冲区解锁
5.V(sem_full);生产者写完数据,有数据的空间就加一

消费者同步流程

需要循环从buff读数据:
1.P(sem_full);判是否可以进行P操作,若可以代表缓冲区有数据,此时数据数量减一
2.lock():给缓冲区加锁,加锁成功就从缓冲区读数据
3.printf(buff[i] ) :从buff中读数据并打印
4.unlock():读完数据,给缓冲区解锁
5.V(sem_empty);消费者读完数据,意味着缓冲区空的数目就增加一

代码实现 主函数

生产者线程函数

消费者线程函数

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

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

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