C++线程安全队列

原创 2016年05月31日 13:25:30
template<typename Data>
class concurrent_queue
{
private:
    std::queue<Data> the_queue;
    mutable boost::mutex the_mutex;
    boost::condition_variable the_condition_variable;

public:
    void push(Data const& data)
    {
#if 0
        boost::mutex::scoped_lock lock(the_mutex);
        the_queue.push(data);
        lock.unlock();
#else   //利用作用域自动释放锁,防止异常崩溃场景
        {
            boost::mutex::scoped_lock lock(the_mutex);
            the_queue.push(data);
        }
#endif
        the_condition_variable.notify_one();
    }

    bool empty() const
    {
        boost::mutex::scoped_lock lock(the_mutex);
        return the_queue.empty();
    }

    //获取队列头部的值,并移除队列头部
    bool try_pop(Data& popped_value)
    {
        boost::mutex::scoped_lock lock(the_mutex);
        if(the_queue.empty())
        {
            return false;
        }

        popped_value=the_queue.front();
        the_queue.pop();
        return true;
    }

    //等待队列有值,再弹出队列的头部
    void wait_and_pop(Data& popped_value)
    {
        boost::mutex::scoped_lock lock(the_mutex);
        while(the_queue.empty())
        {
            the_condition_variable.wait(lock);
        }

        popped_value=the_queue.front();
        the_queue.pop();
    }

};

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

相关文章推荐

c++11 多线程 -- 基本使用

c++11 多线程 – 基本使用 前言:这篇文章仅针对没有使用过c++11线程库的童鞋来快速入门,也是自己的一个简单记录,内容比较基础。 -1.线程的基本使用 -2.互斥量 -3.条件变量 ...

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

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

C++多线程框架(三)--------- 消息队列

首先,本文提到的代码的github地址为: https://github.com/wyh267/Cplusplus_Thread_Lib 之前,多线程一些基本的东西,包括线程创建,...
  • ygrx
  • ygrx
  • 2013-05-23 13:19
  • 19681

C++ 实现线程安全的任务队列

C++ 实现线程安全的任务队列 flyfish 2015-3-6 一、三个接口函数说明 1 add 新增任务 2 get_nonblocking 非阻塞获取任务或者空任务 3 get_block...

Java多线程总结之线程安全队列Queue

在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列。Java提供的线程安全的Queue可以分为阻塞队列和非阻塞队列,其中阻塞队列的典型例子是BlockingQueue,非...
  • madun
  • madun
  • 2014-03-02 22:20
  • 138386

Java多线程总结之线程安全队列Queue

BlockingQueue  阻塞算法ConcurrentLinkedQueue,非阻塞算法
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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