消费者/生产者模型是多线程编程开发的常用模型,该模型通过平衡生产者线程和消费者线程的工作能力来提高程序整体的数据处理能力。

一般来说,我们的资源池是有限的,访问资源需要加锁,访问完以后需要解锁,生产者需要在资源池未满的情况下才能生产产品,消费者需要在资源池不空的情况下才能消费产品。且在设计时需要注意死锁问题。

下面采用semaphore,资源池为环形缓冲区,来实现生产者消费者模型:

#include <unistd.h>
#include <errno.h>
#include <pthread.h>
#include <semaphore.h>
#include <fcntl.h>#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define ERROR(func, no) { \fprintf(stderr, "%s: %s\n", func, strerror(no)); \exit(EXIT_FAILURE); \}#define DEFAULT_CONSUMER_CNT    1
#define DEFAULT_PRODUCER_CNT    3
#define DEFAULT_BUFFER_SIZE 10static size_t in; //  producer's current pos
static size_t out; // consumer's current pos
static size_t consumer_id; // current product id for consumer
static size_t producer_id; // current product id for producer
static s

C++实现简单生产者消费者模型相关推荐

  1. python多线程实现生产者消费者_用Python实现多线程“生产者-消费者”模型的简单例子...

    用 Python 实现多线程"生产者 - 消费者"模型的简单例子 生产者消费者问题是一个著名的线程同步问题, 该问题描述如下: 有一个生产者在生产产品, 这些产品将提供给若干个消费 ...

  2. 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来

    题目要求: 用三个线程实现生产者消费者模型,其中一个线程作为生产者,二个线程作为消费者,生产者随机生产一个时间戳或者字符串,消费者消费这个时间戳,并不能重复消费,并将其打印出来.(这是一道百度面试的算 ...

  3. Python之路(第三十八篇) 并发编程:进程同步锁/互斥锁、信号量、事件、队列、生产者消费者模型...

    一.进程锁(同步锁/互斥锁) 进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的, 而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 例 ...

  4. 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. wait, notify 和 noti ...

  5. 生产者消费者代码c语言_由生产者消费者模型引出的线程同步问题

    由生产者消费者模型引出的线程同步问题 基本生产者消费者模型: 代码示例: 数据模型: /*** Created by IntelliJ IDEA.** @Author: ZhangDong* @Dat ...

  6. pattern in java_Java里的生产者-消费者模型(Producer and Consumer Pattern in Java)

    生产者-消费者模型是多线程问题里面的经典问题,也是面试的常见问题.有如下几个常见的实现方法: 1. wait()/notify() 2. lock & condition 3. Blockin ...

  7. 【Java 并发编程】多线程、线程同步、死锁、线程间通信(生产者消费者模型)、可重入锁、线程池

    并发编程(Concurrent Programming) 进程(Process).线程(Thread).线程的串行 多线程 多线程的原理 多线程的优缺点 Java并发编程 默认线程 开启新线程 `Ru ...

  8. 线程同步之 生产者消费者模型详解

    前言 博主本来没打算讲这个比较前面的知识的(博主socket编程还有两个部分没讲,进程也才写完回收僵尸进程的三种方法,信号捕捉器也才完结),但是今天有朋友来问博主,什么是生产者消费者模型,所以博主就先 ...

  9. 【Java】生产者消费者模型

    [Java]生产者消费者模型 0x1 前言 生产者和消费者问题是线程模型中的经典问题:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存储空间中添加产品,消费者从存储空间中取走产品,当存储空间 ...

最新文章

  1. Akamai CDN技术调研
  2. 表变量是什么_为什么要使用二级指针?
  3. 任务调度及远端管理(基于Quartz.net)
  4. 【2018百度之星资格赛】1002 子串查询
  5. python 多线程Thread
  6. 华为鸿蒙系统备用,就只有华为有备用系统?其实谷歌也准备了一个,不输鸿蒙系统!...
  7. python按哪个键删除_Python-从字典中删除键的方法
  8. javascript(基础)_对数组的遍历方法总结(find, findIndex, forEach,)
  9. perl语言入门(7)
  10. 【转】MFC中用CFile读取和写入文件2
  11. 系统架构设计说明书(模板)和概要设计说明书(模板)和详细设计说明书(模板)
  12. html 项目考勤展示页面,打卡页面.html
  13. Matlab分号的使用
  14. 详解去中心化代币发行机制IDO:七大平台的特性与现状 |链捕手
  15. ios个人小游戏开发者如何做到年收益过百万?
  16. 客户合并修改需求 @熊哥
  17. [转载]内存管理与TLB
  18. 磨金石教育摄影技能干货分享|乡愁摄影作品欣赏——传统建筑篇
  19. 隔壁小王的shell命令1
  20. AcWing 2041. 干草堆(一维差分)

热门文章

  1. Supermarket [堆]
  2. [转载]漫话:如何给女朋友介绍什么是死锁
  3. uniapp 监听路由跳转
  4. B站笔试真题之[编程题]简单表达式计算
  5. 常见的web漏洞及其防范
  6. ADAU1860调试心得(5)ADC-DAC直通程序
  7. 个人项目总结------珠宝管理系统
  8. 随机数生成器,随机种子
  9. 第十七章 指针进阶(1)
  10. 2022年湖北黄冈安全员ABC考试报名条件是什么呢?甘建二告诉你