一个用 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 加入
还未添加个人简介

促进软件开发及相关领域知识与创新的传播
京公网安备 11010502039052号 | 产品资质

评论