首页 > 编程语言 >c++实现多线程消息通信队列

c++实现多线程消息通信队列

时间:2023-07-03 10:59:24浏览次数:45  
标签:std return 队列 c++ queue guard mutex msg 多线程

#ifndef _SYNC_SIMPLEQUEUE_QUEUE_HPP_ #define _SYNC_SIMPLEQUEUE_QUEUE_HPP_
#include <queue>
using namespace std;
namespace utility {
template <typename T> class SyncSimpleQueue { public: void put(const T& msg) { std::unique_lock<std::mutex> guard(m_mutex); m_queue.push(msg); if (m_queue.size() == 1) { can_read.notify_one(); } }
T take() { std::unique_lock<std::mutex> guard(m_mutex); if (m_queue.empty()) { can_read.wait(guard, [this]() { return !m_queue.empty(); }); } T msg = m_queue.front(); m_queue.pop(); return msg; }
bool take_no_wait(T& msg) { std::unique_lock<std::mutex> guard(m_mutex); if (m_queue.empty()) { return false; } msg = m_queue.front(); m_queue.pop(); return true; }
private: std::queue<T> m_queue; std::mutex m_mutex; std::condition_variable can_read; };
} // namespace utility
#endif

标签:std,return,队列,c++,queue,guard,mutex,msg,多线程
From: https://www.cnblogs.com/huahuagongzi521/p/17522216.html

相关文章

  • UVA210 双端队列模拟并行程序
    #include<iostream>#include<algorithm>#include<string>#include<sstream>#include<vector>#include<queue>#include<cstring>usingnamespacestd;constintmaxn=10001;//uva210:题意模拟n个程序的并行执行,有赋值,打印,lock,unlock,......
  • C++面试八股文:std::array如何实现编译器排序?
    C++面试八股文:std::array如何实现编译器排序?某日二师兄参加XXX科技公司的C++工程师开发岗位第25面:面试官:array熟悉吗?二师兄:你说的是原生数组还是std::array?面试官:你觉得两者有什么区别?二师兄:区别不是很大,原生数组(非动态数组)和std::array都在栈上开辟空间,初始化的时候......
  • 【C++】C++类和对象 ( 看完这篇你也能学会 ~ )
    ☑️前言......
  • Mac中VscodeC++万能头文件配置bits/stdc++.h
    /Library/Developer/CommandLineTools/usr/include路径下创建bits文件夹新建stdc++.h头文件,内容如下//C++includesusedforprecompiling-*-C++-*-//Copyright(C)2003-2018FreeSoftwareFoundation,Inc.////ThisfileispartoftheGNUISOC++Library.T......
  • C++ 数据结构
    C++数据结构C/C++数组允许定义可存储相同类型数据项的变量,但是结构是C++中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:Title:标题Author:作者Subject:类目......
  • C++ 判断
    C++判断判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。下面是大多数编程语言中典型的判断结构的一般形式: 判断语句C++编程语言提供了以下类型的判断语句。点击链接查看每个语句的细节。语句描述......
  • 开心档之C++ 数据封装
    C++数据封装所有的C++程序都有以下两个基本要素:**程序语句(代码):**这是程序中执行动作的部分,它们被称为函数。**程序数据:**数据是程序的信息,会受到程序函数的影响。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确......
  • 开心档之C++ 数据结构
    C++数据结构C/C++数组允许定义可存储相同类型数据项的变量,但是结构是C++中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:Title:标题Author:作者Subject:类目Bo......
  • 开心档之C++ 模板
    C++模板模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念。每个容器都有一个单一的定义,比如 向量 ,我们可以定义许多不同类型的向量,比如 vect......
  • 开心档之C++ 数组
    开心档之C++数组目录C++数组声明数组初始化数组访问数组元素实例C++中数组详解C++数组C++支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。数组的声明并不是声明一个个单独的......