行者

求则得之,舍则失之,是求有益于得也,求在我者也。

C++线程安全队列

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

};

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/comwise/article/details/51544962
个人分类: C_C++
上一篇C++队列模板使用std::queue
下一篇闹钟程序的设计
想对作者说点什么? 我来说一句

C++实现线程安全队列

2012年05月14日 2KB 下载

没有更多推荐了,返回首页

关闭
关闭