码迷,mamicode.com
首页 > 编程语言 > 详细

C++实现简单的线程安全队列

时间:2021-03-18 14:12:09      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:return   one   实现   安全   一个   element   rgb   private   unique   

/*
实现一个线程安全的队列
*/

template <class T>
class SafeQueue
{
public:
    SafeQueue(void):q(),m(),c()
    {}
    ~SafeQueue(void)
    {}
    // Add an element to the queue.
    void enqueue(T t)
    {
        std::lock_guard<std::mutex> lock(m);
        q.push(t);
        c.notify_one();
    }

    // Get the "front"-element.
   // If the queue is empty, wait till a element is avaiable.
    T dequeue(void)
    {
        std::unique_lock<std::mutex> lock(m);
        while (q.empty())
        {
            // release lock as long as the wait and reaquire it afterwards.
            c.wait(lock);
        }
        T val = q.front();
        q.pop();
        return val;
    }


private:
    std::queue<T> q;
    mutable std::mutex m;
    std::condition_variable c;
};

 

C++实现简单的线程安全队列

标签:return   one   实现   安全   一个   element   rgb   private   unique   

原文地址:https://www.cnblogs.com/LuckCoder/p/14549952.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!