写点什么

一个用 std::queue 实现的简单阻塞队列

作者:老王同学
  • 2023-08-29
    广东
  • 本文字数: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 
复制代码


发布于: 刚刚阅读数: 6
用户头像

老王同学

关注

多读书,勤跑步,少做梦 2020-04-30 加入

还未添加个人简介

评论

发布
暂无评论
一个用std::queue实现的简单阻塞队列_c++_老王同学_InfoQ写作社区