在编写“生产者---消费者”模式的代码时需要用到消息队列,由于代码量比较小,就使用C++标准库队列queue扩展编写了一个队列类,在queue各个方法的基础上添加了互斥锁,写在一个头文件中即可,全部代码如下:
#pragma once
#include <iostream>
#include <queue>
#include <mutex>
template <typename T_Struct>
class QueueData
{
private:
std::mutex mutex_qData;
std::queue<T_Struct> qData;
public:
QueueData(/* args */){};
~QueueData(){};
bool qData_IsEmpty() //判断d队列是否为空
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
return this->qData.empty();
}
T_Struct qData_Front() //返回队列中第一个元素,即最早被压入队列的元素
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
return this->qData.front();
}
T_Struct qData_Back() //返回队列中第一个元素,即最早被压入队列的元素
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
return this->qData.back();
}
void qData_Push(const T_Struct &data) //入队,在队列末尾加入一个元素
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
qData.push(data);
}
void qData_Pop() //出队,弹出即去除队列的第一个元素即最早被压入队列的元素
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
this->qData.pop();
}
int qData_Size() //返回队列中元素的个数,即队列的长度
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
return this->qData.size();
}
void qData_Clear()
{
std::lock_guard<std::mutex> lock_qData(this->mutex_qData);
for (size_t i = 0; i < this->qData.size(); i++)
{
this->qData.pop();
}
}
};