pthread实现生产者消费者模式

        总感觉Java线程这块缺了些啥,看源代码有时候看不太懂。因此就萌生了我下面的想法,学习pthread的相关知识,去探究Java Thread对象的底层是如何实现。基于这样的缘由我在某位大佬的基础写了下面的代码。

        之前没有写过pthrea的代码,这里主要是做个记录,通过生产者和消费者模式这个例子来了解pthread的简单用法。

1、简单工具类:

template<typename T>class MyToolsQueue {private:queue<T> myQueeu;pthread_mutex_t mutex;pthread_cond_t cond;public:MyToolsQueue() {pthread_mutex_init(&mutex, 0);pthread_cond_init(&cond, 0);}~MyToolsQueue() {pthread_mutex_destroy(&mutex);pthread_cond_destroy(&cond);}void add(T t) {pthread_mutex_lock(&mutex);myQueeu.push(t);pthread_cond_broadcast(&cond);pthread_mutex_unlock(&mutex);}void get(T &t) {pthread_mutex_lock(&mutex);while (myQueeu.empty()) {cout<<"等待中 ... "<<endl;pthread_cond_wait(&cond, &mutex);}t = myQueeu.front();myQueeu.pop();pthread_mutex_unlock(&mutex);}};

2、调用工具类的代码

MyToolsQueue<int> myToolsQueue;void *getTask(void *pVoid) {cout << "getTask()" << endl;int result;while(true){myToolsQueue.get(result);cout<<"result = "<<result<<endl;if(result == -1){break;}}return 0;
}void *setTask(void *pVoid) {cout << "setTask()" << endl;int input;while (true){cin >> input;if(input == -1){myToolsQueue.add(input);break;}myToolsQueue.add(input);}return 0;
}int main() {cout << "pthread And queue" << endl;pthread_t pthread_get;pthread_t pthread_set;pthread_create(&pthread_get, nullptr, getTask, nullptr);pthread_create(&pthread_set, nullptr,setTask, nullptr);pthread_join(pthread_get,0);pthread_join(pthread_set,0);return 0;
}

3、效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot写一个对接钉钉机器人的小插件

钉钉机器人 有时候我门需要监控各种事件&#xff0c;需要机器人给我发给提醒 如&#xff1a;git代码交接&#xff0c;代码合并&#xff0c; 服务器异常捕获&#xff0c;。。。。 参照钉钉给我们的开发文档&#xff0c;可以发现对接起来是非常简单哈哈 这是我写的小插件以及例子…

ChatGPT生产力|chat gpt实战介绍

标注说| ⭐ : 使用稳定&#xff0c;推荐 | &#x1f604; : 免费使用 | &#x1f511; : 需要登陆或密码 | ✈️ : 需waiwang进行访问 | ChatGPT 1PoePoe - Fast, Helpful ...&#x1f511;&#x1f604;&#x1f517;2 AItianhuGPT4&#x1f604;⭐&#x1f517;3 PhantoNa…

XCTF:3-1[WriteUP]

从题目中获取文件 使用file命令查看文件类型 修改后缀为.rar后进行解压缩 再次使用file命令查询该文件的类型 再次修改后缀为.pcap或者.pcapng 使用wireshark打开&#xff0c;直接搜索flag字样 在多个数据包里发现了flag.rar、flag.txt等文件 尝试使用http导出文件 有一个fl…

数据结构——框架简介

1.数据结构的作用 数据结构是计算机科学中一种重要的概念&#xff0c;它主要用于组织和存储数据以便有效地进行操作。数据结构可以看作是数据的组织方式&#xff0c;通过合理的数据结构设计&#xff0c;可以更高效地执行各种操作&#xff0c;提高程序的性能和可维护性。 以下是…

SpringBoot 动态加载jar包,动态配置

一、概述 1、背景 目前数据治理服务中有众多治理任务&#xff0c;当其中任一治理任务有改动需要升级或新增一个治理任务时&#xff0c;都需要将数据治理服务重启&#xff0c;会影响其他治理任务的正常运行。 2、目标 能够动态启动、停止任一治理任务 能够动态升级、添加治理…

文献速递:肿瘤分割---- ALA-Net:用于3D结直肠肿瘤分割的自适应病变感知注意力网络

文献速递&#xff1a;肿瘤分割---- ALA-Net&#xff1a;用于3D结直肠肿瘤分割的自适应病变感知注意力网络 01 文献速递介绍 结直肠癌&#xff08;CRC&#xff09;在全球范围内与高发病率和死亡率相关&#xff0c;。肿瘤的预后高度依赖于诊断时疾病的阶段。准确检测和分割肿瘤…

不需英文基础也可以轻松学编程,中文编程开发工具免费版下载,编程工具构件箱之扩展控制面板构件用法

不需英文基础也可以轻松学编程&#xff0c;中文编程开发工具免费版下载&#xff0c;编程工具构件箱之扩展控制面板构件用法 一、前言 编程入门视频教程链接 https://edu.csdn.net/course/detail/39036 编程工具及实例源码文件下载可以点击最下方官网卡片——软件下载——常…

1-3 动手学深度学习v2-线性回归的从零开始实现-笔记

手动创建训练数据集 根据带有噪声的线性模型构造一个人造数据集。我们使用线性模型参数 w [ 2 , − 3.4 ] T \pmb{w} [2,-3.4]^{T} w[2,−3.4]T、 b 4.2 b 4.2 b4.2和噪声项 ϵ \epsilon ϵ生成数据集及其标签&#xff1a; y X w b ϵ \pmb{y} \pmb{Xw}b\epsilon yXw…

【Mysql】用户权限操作、处理重复数据

用户权限操作 登陆进入数据库 输入用户名和密码 #mysql -uroot -p;创建一个名字为“mei_db” 编码为utf-8的数据库 create database if not exists mei_db default character set utf8 collate utf8_general_ci;# 创建用户&#xff0c;用户可以通过特定ip的客户端访问数据库…

2024年【化工自动化控制仪表】考试题及化工自动化控制仪表最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年化工自动化控制仪表考试题为正在备考化工自动化控制仪表操作证的学员准备的理论考试专题&#xff0c;每个月更新的化工自动化控制仪表最新解析祝您顺利通过化工自动化控制仪表考试。 1、【单选题】()指用多个相…

Flask 入门5 :过滤器

1. 自定义过滤器 过滤器本质上是 Python 的函数&#xff0c;他会把被过滤的值当作第一个参数传给这个函数&#xff0c;函数经过一些逻辑处理后&#xff0c;再返回新的值。在过滤器函数写好后&#xff0c;可以通过app.template_filter 装饰器或者是app.add_template_filter函数…

spring-security authentication persistence

翻译版本【spring-security 6.2.1】persistence Persisting Authentication 用户第一次请求受保护的资源时&#xff0c;系统会提示他们输入凭据。提示输入凭据的最常见方法之一是将用户重定向到登录页面。未经身份验证的用户请求受保护的资源的HTTP交换可能如下所示: 例1。未…

关于Linux和消息队列常见的十道面试题

实际工作中如何排查CPU飙升问题&#xff1f; 在实际工作中&#xff0c;我们可以通过以下步骤来排查CPU飙升的问题&#xff1a; 使用系统监控工具&#xff1a;首先&#xff0c;我们可以使用系统监控工具&#xff0c;如top命令&#xff0c;来查看所有进程占系统CPU的排序。这样可…

编程笔记 html5cssjs 079 JavaScript 循环语句

编程笔记 html5&css&js 079 JavaScript 循环语句 循环语句1. for 循环2. while 循环3. do...while 循环4. for...in 循环5. for...of 循环 小结 在JavaScript中&#xff0c;有几种不同的循环语句用于执行重复的代码块。 循环语句 以下是一些主要的循环类型及其详解与示…

PHP三级分类数据处理

一、原始数据 function getDatas(){return [[component > system,redict > /system,path > /system,hidden > 1,name > 系统管理,children > [[component > user,redict > /user,path > /user,hidden > 1,name > 用户管理,children > [[c…

倒计时63天

e/f/j e:&#xff0c;&#xff0c;&#xff0c;一道e题卡我2个多h&#xff0c;幸好之后去写i题了&#xff0c;不然就完了╥﹏╥... E-Tokitsukaze and Eliminate (easy)_2024牛客寒假算法基础集训营2 (nowcoder.com) 我的思路&#xff1a;倒过来看不同个数再考虑一下1212这样…

UML---用例图,类图

用例图 用例图&#xff08;Use Case Diagram&#xff09;主要描述系统的功能需求和参与者与系统之间的交互。它是用户与系统交互的最简表示形式&#xff0c;展现了用户和与他相关的用例之间的关系。用例图被视为系统的蓝图&#xff0c;通过它&#xff0c;人们可以获知系统不同种…

mysql:事务的特性ACID、并发事务(脏读、不可重复读、幻读、如何解决、隔离级别)、undo log和redo log的区别、相关面试题和答案

事务是一组操作的集合&#xff0c;它会把所有的操作作为一个整体一起向系统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 事务的特性&#xff08;ACID&#xff09; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的…

Flink-1.18.1环境搭建

下载 下载flink安装包 Index of /dist/flink/flink-1.18.1 下载flink-cdc安装包 Release Release 3.0.0 ververica/flink-cdc-connectors GitHub 安装 添加环境变量 vi ~/.bash_profile export FLINK_HOME=/home/postgres/flink/flink-1.18.1 export PATH=$PATH:$FL…

idea开发工具的简单使用与常见问题

1、配置git 选择左上角目录file->setting 打开&#xff0c;Version Control 目录下Git&#xff0c;选择git安装目录下的git.exe文件&#xff1b; 点击test&#xff0c;出现git版本&#xff0c;则表示git识别成功&#xff0c;点击右下角确认即可生效。 2、配置node.js 选…