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();
    }

};

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

秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

  • 2013年03月13日 10:47
  • 39KB
  • 下载

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

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

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

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

c++11 线程安全的队列实现

用c++11的mutex和condition_variable配合STL的queue可以很方便地实现线程安全的队列,queue用来存取元素,存取元素时用mutex进行全局加锁,存取完成再进行解锁。 ...
  • mymodian
  • mymodian
  • 2016年12月13日 11:53
  • 2194

c++多线程安全的消息队列模板

  • 2009年03月17日 14:35
  • 2KB
  • 下载

C++11线程安全队列和安全栈

文章代码取自C++11并发编程指南,记录于此方便日后查看
  • beichen_yx
  • beichen_yx
  • 2017年05月08日 09:47
  • 320

C++实现线程安全队列

  • 2012年05月14日 13:56
  • 2KB
  • 下载

一个用 C++ 实现的快速无锁队列

在进程间传递数据很烦人,真心烦人。一步做错,数据就会损坏。(相较于其他读写方式)即使数据排列正确,也更易出错。 一如既往的,有两种方式处理这个问题:简单的方式、麻烦的方式。 简单的方式 使用你使...
  • okletsgo007
  • okletsgo007
  • 2014年06月06日 16:56
  • 2222

c++11线程安全的队列的类的定义

#include #include #include #include template class threadsafe_queue { private: mutable std::mu...
  • oZuoQi
  • oZuoQi
  • 2015年11月26日 16:46
  • 1522

C/C++ 线程安全队列

一、简介线程安全是一个比较严肃的问题,如果处理不好,可能导致数据被破坏,程序崩溃等问题,如何来处理多线程的并发问题?在windows平台有相应的api给你用于控制并发,如互斥锁,信号量,事件,临界区等...
  • what951006
  • what951006
  • 2017年09月09日 17:16
  • 516
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++线程安全队列
举报原因:
原因补充:

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