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

多线程队列模型

时间:2019-06-05 21:40:06      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:nbsp   sign   code   thread   队列   template   wait   mutex   style   

template <typename T>
class Queue
{
private:
    std::queue<T> q;
    pthread_mutex_t q_mutex;
    pthread_cond_t q_cond;

public:
    Queue()
    {
        pthread_mutex_init(&q_mutex, NULL);
        pthread_cond_init(&q_cond, NULL);
    }
    virtual ~Queue()
    {
        pthread_mutex_destroy(&q_mutex);
        pthread_cond_destroy(&q_cond);
    }
    
    // 插入
    void insert(const T& e)
    {
        pthread_mutex_lock(&q_mutex);
        q.push(e);
        pthread_cond_signal(&q_cond);
        pthread_mutex_unlock(&q_mutex);
    }
    
    // 取数据,队列空则阻塞
    void take(T& e)
    {
        pthread_mutex_lock(&q_mutex);
        while(q.empty())
        {
            pthread_cond_wait(&q_cond, &q_mutex)
        }
        e = q.front();
        q.pop();
        pthread_mutex_unlock(&q_mutex);
    }
    
    // 取数据,队列空则返回
    bool pull(T& e)
    {
        boot ret = false;
        pthread_mutex_lock(&q_mutex);
        while(!q.empty())
        {
            e = q.front();
            q.pop();
            ret = true;
        }
        pthread_mutex_unlock(&q_mutex);
        return ret;
    }
};

 

多线程队列模型

标签:nbsp   sign   code   thread   队列   template   wait   mutex   style   

原文地址:https://www.cnblogs.com/share-ideas/p/10981785.html

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