一个用 std::queue 实现的简单阻塞队列
就是 queue+条件变量封装成的一个阻塞队列,一个线程 Push,一个线程 Pop,很简单的东西。有些人很喜欢自己手撸各种 buffer 代码库,我不喜欢。标准库提供的东西健壮性更好。
复制代码
版权声明: 本文为 InfoQ 作者【老王同学】的原创文章。
原文链接:【http://xie.infoq.cn/article/2b14f48b5bc917152e69bcd47】。文章转载请联系作者。
本文字数:527 字
阅读完需:约 2 分钟
就是 queue+条件变量封装成的一个阻塞队列,一个线程 Push,一个线程 Pop,很简单的东西。有些人很喜欢自己手撸各种 buffer 代码库,我不喜欢。标准库提供的东西健壮性更好。
#ifndef __Block_Queue_h__
#define __Block_Queue_h__
#include <queue>
#include <mutex>
#include <condition_variable>
template<class T>
class BlockQueue
{
public:
BlockQueue() {}
~BlockQueue() {}
void Push(T&& value)
{
std::unique_lock<std::mutex> lock(m_mutex);
m_data.push(value);
m_condition.notify_all();
}
void Push(const T& value)
{
std::unique_lock<std::mutex> lock(m_mutex);
m_data.push(value);
m_condition.notify_all();
}
T Pop()
{
std::unique_lock<std::mutex> lock(m_mutex);
while (m_data.empty())
{
m_condition.wait(lock);
}
T value(std::move(m_data.front()));
m_data.pop();
return value;
}
private:
std::queue<T> m_data;
std::mutex m_mutex;
std::condition_variable m_condition;
};
#endif
版权声明: 本文为 InfoQ 作者【老王同学】的原创文章。
原文链接:【http://xie.infoq.cn/article/2b14f48b5bc917152e69bcd47】。文章转载请联系作者。
多读书,勤跑步,少做梦 2020-04-30 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论