Qt实现生产者消费者模型

本文展示的是用Qt实现的生产者消费者模型。
该模型含有4个生产者,4个消费者,12个缓冲区。
当缓冲区放满产品时,生产者进程阻塞。
当缓冲区无产品时,消费者进程阻塞。
点击“Producer1”可以改变当前进程的状态。
点击“Pause"可以暂停所有进程,点击”Reset"可以恢复初始状态。
每一个生产者生产的物品有固定的颜色,以示区分。
右侧文本栏展示每一时刻各进程的运行/阻塞情况。
中央文本实时显示空余数量和已有物品数量。




核心代码段

class Consumer : public QThread          //消费者进程
{Q_OBJECTprivate:int n; //阻塞/运行状态标志public:void run()    //重写run函数{while(true){if(n == 1 && full.tryAcquire())     //若P操作成功{empty.release();               //P(empty)emit consume();emit consumeBlock(false);consumerPosition = (consumerPosition + 1) % BufSize;    //修改当前位置}else{emit consumeBlock(true);  //否则,阻塞}Sleep(sleepTime);            //添加时间间隔,增强可视化效果}}void setCondition(int Button)      //设置当前状态{n=Button;}
signals:void consume();void consumeBlock(bool isBlocked);
};class Producer : public QThread       //生产者进程
{Q_OBJECTprivate:int n;         //阻塞/运行状态public:void run(){while (true){if(n == 1 && empty.tryAcquire())  //若P操作成功{full.release();        //V(empty)emit produce();emit produceBlock(false);producerPosition = (producerPosition + 1) % BufSize;    //修改当前位置}else{emit produceBlock(true);  //否则,阻塞}Sleep(sleepTime);    //添加时间间隔,增强可视化效果}}void setCondition(int Button)  //设置当前状态{n=Button;}
signals:void produce();void produceBlock(bool isBlocked);
};

资源下载地址
包括可执行程序和源代码

生产者消费者模型(Qt实现)相关推荐

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

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

  2. 生产者/消费者模型详解(基于Java)

    title: 生产者消费者模型 tags: 多线程 synchronized 锁 wait() notify() 生产者/消费者模型原理以及代码实现 一.生产者/消费者模型原理 所谓的生产者消费者模型 ...

  3. python 生产消费者_python之生产者消费者模型实现详解

    代码及注释如下 #Auther Bob #--*--conding:utf-8 --*-- #生产者消费者模型,这里的例子是这样的,有一个厨师在做包子,有一个顾客在吃包子,有一个服务员在储存包子,这个 ...

  4. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  5. 进程 互斥锁、队列与管道、生产者消费者模型

    目录 1.互斥锁 2.队列与管道 3.生产者消费者模型(Queue) 4.生产者消费者模型(JoinableQueue) 1.互斥锁 首先导入Lock模块 实例化一把锁 但是每次生成子进程的时候都会重 ...

  6. 11.python并发入门(part8 基于线程队列实现生产者消费者模型)

    一.什么是生产者消费者模型? 生产者就是生产数据的线程,消费者指的就是消费数据的线程. 在多线程开发过程中,生产者的速度比消费者的速度快,那么生产者就必须等待消费者把数据处理完,生产者才会产生新的数据 ...

  7. 线程同步之经典生产者-消费者模型

    /* 线程同步之生产者-消费者模型 该模型符合以下要求: 1.生产者只在仓储未满时生产,仓满则停止生产: 2.消费者只在仓储未空时消费,仓空则等待: 3.当消费者发现仓储为空时则通知生产者生产: 4. ...

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

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

  9. C++编程模拟生产者消费者模型

    生产者消费者问题是操作系统中典型的进程同步互斥问题,(英语:Producer-Consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同 ...

最新文章

  1. Java是如何实现自己的SPI机制的? JDK源码(一)
  2. Puppet的一些奇技淫巧
  3. python 文本处理模块_Python文本处理几种方法
  4. Spring的事务控制-基于xml方式
  5. c++访问控制说明符
  6. 【FPGA-F3】阿里云FAAS平台,极大简化FPGA开发部署流程
  7. android相册拍照剪切上传封装,安卓,图片裁剪上传真机测试好使,打包后显示:无法保存裁剪的图像...
  8. UVA - 11059 Maximum Product-暴力枚举
  9. Java中常用集合类对比_集合比较
  10. Linus Torvalds谈ECC内存的重要性 痛斥英特尔正在扼杀它
  11. 【移动开发】SparseArray替代HashMap
  12. 数独游戏技巧从入门到精通_中国茶艺技巧:500集从入门到精通教程,视频+素材+笔记...
  13. mysql时间10位数字_mysql—MySQL数据库中10位时间戳转换为标准时间后,如何对标准时间进行加减X天处理...
  14. 【线性代数及其应用】02 -矩阵代数
  15. ecshop 模板页php,ECSHOP 模板结构说明
  16. GraphPad Prism 统计教程 :高斯分布
  17. 量子计算机模拟黑洞纠缠,科学家想用量子纠缠探查黑洞内部?那得先找到自旋方向相反的光子...
  18. 二十一世纪大学英语读写教程(第二册)学习笔记(原文)——1 - Winston Churchill—His Other Life(丘吉尔与绘画)
  19. kubernetes增加删除master节点操作
  20. 华为IT总监徐家骏的10年

热门文章

  1. mate30pro支不支持鸿蒙系统,华为mate30Pro:鸿蒙系统+麒麟985+5G,如果上市了你会支持吗?...
  2. Parallel PSO Using C++ Thread(基于c++多线程的并行粒子群优化算法)
  3. Archlinux YouCompleteMe+syntastic vim自动补全插件,显示缩进和状态栏美化,爽心悦目的vim
  4. Android美化之透明状态栏
  5. c语言的pyx文件什么作用,pyx文件 生成pyd 文件用于 cython调用的实现
  6. 中文定制linux,强烈推荐新氧ubuntu中文定制版
  7. Android studio 下载资源太慢
  8. 通过js 快捷给元素设置多个css属性 -- cssText
  9. ubuntu系统修改用户权限
  10. java 输入与输出