C++队列模板使用std::queue

原创 2016年05月31日 13:24:33
#ifndef _TASK_QUEUE_H_
#define _TASK_QUEUE_H_

#include <string>
#include <queue>
#include <boost/thread.hpp>

template<class T>
class TaskQueue 
{
public:
    TaskQueue(){
        queue_.clear();
    }

    virtual ~TaskQueue(){
    };

    /**
    * @Appends the task to the queue
    * @param   the task object
    **/
    virtual void append(const T& _t){
        thr_lck lck(mtx_);
        queue_.push(_t);
    }

    /**
    * @Return the current size of the queue
    * @returns the queue size
    **/
    virtual size_t queueSize() const {
        thr_lck lck(mtx_);
        return queue_.size();
    }

    /**
    * @Return the queue
    * @returns the message queue
    **/
    virtual bool empty() {
        thr_lck lck(mtx_);
        return queue_.empty();
    }

    /**
    * @Return the queue
    * @returns the message queue
    **/
    virtual std::queue<T>& getQueue() {
        thr_lck lck(mtx_);
        return queue_;
    }

    /**
    * @Return the queue
    * @returns the message queue
    **/
    virtual const std::queue<T>& getQueue() const {
        thr_lck lck(mtx_);
        return queue_;
    }

    /**
    * @Return the oldest task from the queue
    * @returns the front task
    **/
    virtual T front() {
        thr_lck lck(mtx_);
        T message;
        if (!queue_.empty()) 
        {
            message = queue_.front();
        }
        return message;
    }

    /**
    * @Pop the oldest task from the front of the queue.
    * @returns the oldest task
    **/
    virtual T popMessage(){
        thr_lck lck(mtx_);
        T message;
        if (!queue_.empty()) 
        {
            message = queue_.front();
            queue_.pop();
        }
        return message;
    }

protected:
    typedef std::queue<T> task_queue;
    task_queue queue_;

    typedef boost::mutex::scoped_lock thr_lck;
    boost::mutex mtx_;
};

#endif

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++11:基于std::queue和std::mutex构建一个线程安全的队列

C++中的模板std::queue提供了一个队列容器,但这个容器并不是线程安全的,如果在多线程环境下使用队列,它是不能直接拿来用的。 基于它做一个线程安全的队列也并不复杂。基本的原理就是用std::...
  • 10km
  • 10km
  • 2016-07-29 19:18
  • 3385

c++11线程池实现

咳咳。c++11 加入了线程库,从此告别了标准库不支持并发的历史。然而 c++ 对于多线程的支持还是比较低级,稍微高级一点的用法都需要自己去实现,譬如线程池、信号量等。线程池(thread pool)...
  • zdarks
  • zdarks
  • 2015-07-22 00:01
  • 11469

C++ 标准模板库STL 队列 queue 使用方法与应用介绍(一)

queue queue模板类的定义在头文件中。 与stack模板类很相似,queue模板类也需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deq...

std::queue

std::queue 是 stl 里面的容器适配器, 用来适配FIFO的数据结构。std::queue, 入队列的方法是: std::queue::push(), 出队列的方法是: std::queu...

STL系列之三 queue 单向队列

queue单向队列与栈有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以...

C++/C++11中std::queue的使用

C++/C++11中std::queue的使用

STL常用容器总结——queue单向队列

原文 单向队列和栈类似,栈是只在栈顶添加或移除数据,单向队列是从队尾添加数据,从队头移除数据。栈是先进后出(FILO),单向队列是先进先出(FIFO)。在STL中,单向队列也是以别的容器作为底层数据结...

C++ 标准模板库STL 优先级队列 priority_queue 使用方法与应用介绍(一)

priority_queue Priority queues are a type of container adaptors, specifically designed such that it...

C++ 不用std::queue 实现读取网络字节缓冲去的队列

想必你也和我一样听说了C++ STL 容器的std::queue 貌似有性能问题,内存会持续增加。我并没有深究解决办法,而是暴力自己重写了一个读取字节缓冲区的队列类 废话不多说直接看实现。利用这个这...

ACM 模板 c++ STL 队列 queue 优先队列

STL 中优先队列的使用方法(priority_queu)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)