【12】c++设计模式——>单例模式练习(任务队列)
属性:
(1)存储任务的容器,这个容器可以选择使用STL中的队列(queue)
(2)互斥锁,多线程访问的时候用于保护任务队列中的数据
方法:主要是对任务队列中的任务进行操作
(1)任务队列中任务是否为空
(2)往任务队列中添加一个任务
(3)从任务队列中取出一个任务
(4)从任务队列中删除一个任务
根据分析,就可以把这个饿汉模式的任务队列的单例类定义出来了:
#include <iostream>
#include <mutex>
#include <thread>
#include <queue>
using namespace std;//创建一个饿汉模式单例
class TaskQueue
{
public:static TaskQueue* getInstance(){cout << "我是一个饿汉单例模式" << endl;return m_obj;}//任务队列是否为空bool isEmpty(){lock_guard<mutex> locker(m_mutex);return m_taskQ.empty();}//添加任务void pushTask(int task){lock_guard<mutex> locker(m_mutex);m_taskQ.push(task);}//删除任务bool popTask(){lock_guard<mutex> locker(m_mutex);if (!m_taskQ.empty()){m_taskQ.pop();return true;}return false;}//取出来一个任务int getTask(){lock_guard<mutex> locker(m_mutex);if (!m_taskQ.empty()){return m_taskQ.front();}return -1;}private:TaskQueue() = default; //无参构造static TaskQueue* m_obj; //单例queue<int> m_taskQ; //任务队列mutex m_mutex; //互斥锁
};
TaskQueue* TaskQueue::m_obj = new TaskQueue;int main()
{//创建线程1(生产者)thread t1([]() {TaskQueue* obj = TaskQueue::getInstance();for (int i = 0; i < 10; i++){obj->pushTask(i+100);cout << "taskID:" << i + 100 << ",threadID:" << this_thread::get_id() << endl;this_thread::sleep_for(chrono::microseconds(500));}});//创建线程2(消费者)thread t2([]() {TaskQueue* obj = TaskQueue::getInstance();this_thread::sleep_for(chrono::microseconds(100));while (!obj->isEmpty()){cout << "taskID:" <<obj->getTask()<< ",threadID:" << this_thread::get_id() << endl;obj->popTask();this_thread::sleep_for(chrono::microseconds(500));}});t1.join();t2.join();
}

相关文章:
【12】c++设计模式——>单例模式练习(任务队列)
属性: (1)存储任务的容器,这个容器可以选择使用STL中的队列(queue) (2)互斥锁,多线程访问的时候用于保护任务队列中的数据 方法:主要是对任务队列中的任务进行操作 &…...
Python之函数、模块、包库
函数、模块、包库基础概念和作用 A、函数 减少代码重复 将复杂问题代码分解成简单模块 提高代码可读性 复用老代码 """ 函数 """# 定义一个函数 def my_fuvtion():# 函数执行部分print(这是一个函数)# 定义带有参数的函数 def say_hello(n…...
SQL创建与删除索引
索引创建、删除与使用: 1.1 create方式创建索引:CREATE [UNIQUE – 唯一索引 | FULLTEXT – 全文索引 ] INDEX index_name ON table_name – 不指定唯一或全文时默认普通索引 (column1[(length) [DESC|ASC]] [,column2,…]) – 可以对多列建立组合索引 …...
网络协议--链路层
2.1 引言 从图1-4中可以看出,在TCP/IP协议族中,链路层主要有三个目的: (1)为IP模块发送和接收IP数据报; (2)为ARP模块发送ARP请求和接收ARP应答; (3…...
HDLbits: Count clock
目前写过最长的verilog代码,用了将近三个小时,编写12h显示的时钟,改来改去,估计只有我自己看得懂(吐血) module top_module(input clk,input reset,input ena,output pm,output [7:0] hh,output [7:0] mm,…...
【1day】用友移动管理系统任意文件上传漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现...
【c++】向webrtc学习容器操作
std::map的key为std::pair 时的查找 std::map<RemoteAndLocalNetworkId, size_t> in_flight_bytes_RTC_GUARDED_BY(&lock_);private:using RemoteAndLocalNetworkId = std::pair<uint16_t, uint16_t...
SpringBoot+Vue3外卖项目构思
SpringBoot的学习: SpringBoot的学习_明里灰的博客-CSDN博客 实现功能 前台 用户注册,邮箱登录,地址管理,历史订单,菜品规格,购物车,下单,菜品浏览,评价,…...
【AI视野·今日NLP 自然语言处理论文速览 第四十七期】Wed, 4 Oct 2023
AI视野今日CS.NLP 自然语言处理论文速览 Wed, 4 Oct 2023 Totally 73 papers 👉上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Contrastive Post-training Large Language Models on Data Curriculum Authors Canwen Xu, Corby Rosset, Luc…...
c++的lambda表达式
文章目录 1 lambda表达式2 捕捉列表 vs 参数列表3 lambda表达式的传递3.1 函数作为形参3.2 场景1:条件表达式3.3 场景2:线程的运行表达式 1 lambda表达式 lambda表达式可以理解为匿名函数,也就是没有名字的函数,既然是函数&#…...
电梯安全监测丨S271W无线水浸传感器用于电梯机房/电梯基坑水浸监测
城市化进程中,电梯与我们的生活息息相关。高层住宅、医院、商场、学校、车站等各种商业体建筑、公共建筑中电梯为我们生活工作提供了诸多便利。 保障电梯系统的安全至关重要!特别是电梯机房和电梯基坑可通过智能化改造提高其安全性和稳定性。例如在暴风…...
Java异常:基本概念、分类和处理
Java异常:基本概念、分类和处理 在Java编程中,异常处理是一个非常重要的部分。了解如何识别、处理和避免异常对于编写健壮、可维护的代码至关重要。本文将介绍Java异常的基本概念、分类和处理方法,并通过简单的代码示例进行说明。 一、什么…...
小谈设计模式(19)—备忘录模式
小谈设计模式(19)—备忘录模式 专栏介绍专栏地址专栏介绍 备忘录模式主要角色发起人(Originator)备忘录(Memento)管理者(Caretaker) 应用场景结构实现步骤Java程序实现首先ÿ…...
《数据库系统概论》王珊版课后习题
第一章 绪论 1.数据、数据库、数据库管理系统、数据库系统的概念 (1)数据(Data):数据是数据库中存储的基本对象,是描述事物的符号记录。数据有多种表现形式,它们都可以经过数字化后存入计算机…...
MariaDB 修改用户远程登录
今天修改MariaDB数据库用户的Host时出现错误: ERROR 1356 (HY000): View ‘mysql.user’ references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them 我的步骤如下: 1.登陆 2.use mysql; 3.执行…...
Elasticsearch使用mapping映射定义以及基本的数据类型
1、说明 Elasticsearch的映射相当于数据库的数据字典,它定义了每个字段的名称和能够保存的数据类型,并且内置了20多种字段类型用于支持多种多样的结构化数据,这里仅介绍几种常用的字段类型,如需要了解全部的类型,请参…...
【unity】制作一个角色的初始状态(左右跳二段跳)【2D横板动作游戏】
前言 hi~ 大家好!欢迎大家来到我的全新unity学习记录系列。现在我想在2d横板游戏中,实现一个角色的初始状态-闲置状态、移动状态、空中状态。并且是利用状态机进行实现的。 本系列是跟着视频教程走的,所写也是作者个人的学习记录笔记。如有错…...
不死马的利用与克制(基于条件竞争)及变种不死马
不死马即内存马,它会写进进程里,并且无限地在指定目录中生成木马文件 这里以PHP不死马为例 测试代码: <?phpignore_user_abort(true);set_time_limit(0);unlink(__FILE__);$file .test.php;$code <?php if(md5($_GET["pass…...
计算机竞赛 车道线检测(自动驾驶 机器视觉)
0 前言 无人驾驶技术是机器学习为主的一门前沿领域,在无人驾驶领域中机器学习的各种算法随处可见,今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂,看上去无从下手。那么面对这样极其…...
Java代理简介
代理简介 Java中的代理是一种设计模式,它允许一个对象(代理对象)代表另一个对象(真实对象)来控制对真实对象的访问。代理对象通常拥有与真实对象相同的接口,这使得客户端可以通过代理来访问真实对象&#…...
LeetCode 11. Container With Most Water 题解
LeetCode 11. Container With Most Water 题解 题目描述 给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条…...
新手福音:用快马平台将vmware官网概念转化为可交互的虚拟机演示代码
作为一名刚接触虚拟化技术的新手,我最近在VMware官网上看到了关于虚拟机的基础概念介绍。虽然理论知识很全面,但总觉得少了点动手实践的环节。直到发现了InsCode(快马)平台,它让我能够把抽象的概念快速转化为可运行的代码,这种学习…...
FunASR Docker部署避坑大全:从SSL证书报错到热词不生效,一次解决所有常见问题
FunASR Docker实战排障指南:从证书配置到热词优化的深度解决方案 当你第一次尝试在Docker环境中部署FunASR语音识别服务时,那些看似简单的命令行参数背后可能藏着无数个"坑"。本文不会重复官方文档的基础操作,而是聚焦于五个最具代…...
Vivado平台下PCIe IP核选型指南:从硬核到XDMA的实战抉择
1. PCIe技术基础与Vivado开发环境搭建 第一次接触PCIe接口开发时,我被各种专业术语搞得晕头转向。后来才发现,理解PCIe就像理解高速公路系统一样简单。PCIe本质上是一种点对点的高速串行总线,就像城市间修建的多车道高速公路。每个"车道…...
革新性Koikatu体验增强工具:KK-HF_Patch效率提升指南
革新性Koikatu体验增强工具:KK-HF_Patch效率提升指南 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch 你是否曾在《Koikatu》游戏中遇到…...
告别布局跳动!Android Dialog+EditText+软键盘的终极适配指南(含Kotlin代码)
Android Dialog软键盘适配全攻略:从布局跳动到完美交互 在Android开发中,Dialog与软键盘的交互一直是让开发者头疼的问题。当EditText获得焦点时,弹出的软键盘经常会遮挡输入框或导致布局跳动,严重影响用户体验。本文将深入探讨Di…...
Swin2SR多帧超分:视频序列的时空信息融合
Swin2SR多帧超分:视频序列的时空信息融合 1. 引言 你有没有遇到过这样的情况:从监控录像中截取的关键画面模糊不清,或者老视频中的珍贵片段分辨率太低,无法看清细节?传统单帧超分技术往往力不从心,因为它…...
嵌入式NTP客户端库:高精度时间同步与自动时区管理
1. NTP客户端库深度解析:嵌入式系统中的高精度时间同步与时区管理1.1 库定位与工程价值NTP(Network Time Protocol)客户端库是嵌入式系统中实现网络时间同步的关键组件。该库并非简单封装UDP通信,而是构建了一套完整的“时间服务栈…...
Fedora 42 上 Podman 镜像拉取慢?5分钟搞定国内镜像源配置(保姆级教程)
Fedora 42 上 Podman 镜像拉取慢?5分钟搞定国内镜像源配置(保姆级教程) 刚接触 Fedora 42 的开发者们,是否经常被 Podman 拉取镜像时的蜗牛速度折磨得抓狂?每次看着进度条像老牛拉破车一样缓慢移动,心里是不…...
哪种编程语言更契合 Claude Code?:从代码行数到 Token 时代的效能重构
在软件开发的漫长岁月中,我们曾习惯于用代码行数来衡量工作量;而今,在 AI 编程的纪元,工作量的天平正向 Token 计数倾斜。就在几周前,GitHub 上涌现出一项令人侧目的基准测试:mame/ai-coding-lang-bench。其…...
