基于boost库的线程安全queue

来源:互联网 发布:手机网站自助建站源码 编辑:程序博客网 时间:2024/06/04 18:55

STL的queue多线程下是不安全的,当然网上有很多无锁队列,如boost::lockfree::queue就是很好的东西。这里实现一个互斥锁的线程安全队列,基于STL的QUEUE。

/************************************************************************************************File Name:thread_safe_queue.hppVersion: Initial DraftAuthor:yang yangCreated:2017.06.08Last Modified:2017.06.08Description:A thread safe queue,use the queue of STL,and Boost.************************************************************************************************/#ifndef THREAD_SAFE_QUEUE_HPP#define THREAD_SAFE_QUEUE_HPP#include <queue>#include <boost/thread.hpp>#include <boost/lambda/lambda.hpp>template <typename T> class ThreadSafeQueue{    private:        std::queue<T> queue;        boost::mutex mutex;    public:        ThreadSafeQueue(){};        ThreadSafeQueue(const ThreadSafeQueue &other)        {            boost::mutex::scoped_lock lock(other.mutex);            queue = other.queue;        }        ~ThreadSafeQueue(){};        void Push(T &new_value)        {            boost::mutex::scoped_lock lock(mutex);            queue.push(new_value);            condition.notify_one();        }        void Pop(T &value)        {            boost::mutex::scoped_lock lock(mutex);            value = queue.front();            queue.pop();        }        bool TryPop(T &value)        {            boost::mutex::scoped_lock lock(mutex);            if( queue.empty())            {                return false;            }            else            {                value = queue.front();                queue.pop();                return true;            }        }                bool Empty()        {            boost::mutex::scoped_lock lock(mutex);            return queue.empty();        }};#endif


原创粉丝点击