多线程队列模型

Posted share-ideas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程队列模型相关的知识,希望对你有一定的参考价值。

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;
    
;

 

以上是关于多线程队列模型的主要内容,如果未能解决你的问题,请参考以下文章

Redis Stream队列与多线程模型

Python 多线程同步队列模型

Linux多线程_(Posix信号量实现环形队列生产者消费者模型)

多线程队列模型

多线程案例-阻塞式队列

C#多线程处理多个队列数据的方法