c++ 多线程阻塞队列的简单实现

来源:互联网 发布:环信 java 服务端 编辑:程序博客网 时间:2024/05/19 02:30

经常用到,经常重复写,先留一份,日后备用,不想用别人实现的,第三方的针对性都不强,加上了一堆用不到的东西。好了 上代码

/* * Queue.h * *  Created on: 2013-4-9 *      Author: sunshaolei */#ifndef MYQUEUE_H_#define MYQUEUE_H_#include <deque>#include <sys/types.h>#include <stdio.h>#include <unistd.h>#include <pthread.h>#include <stdio.h>using namespace std;template<class DataType>class MyQueue {public:MyQueue(int count):_nready(0) {this->count = count;pthread_mutex_init(&_not_full_mutex, NULL);pthread_mutex_init(&_not_empty_mutex, NULL);pthread_cond_init(&_not_full_cond, NULL);pthread_cond_init(&_not_empty_cond, NULL);}int push(DataType &d) {pthread_mutex_lock(&_not_full_mutex);while (_nready >= count)pthread_cond_wait(&_not_full_cond, &_not_full_mutex);_queue.push_back(d);_nready++;pthread_cond_signal(&_not_empty_cond);pthread_mutex_unlock(&_not_full_mutex);return 0;}int pop(DataType &d) {pthread_mutex_lock(&_not_empty_mutex);while (_nready <= 0)pthread_cond_wait(&_not_empty_cond, &_not_empty_mutex);d = _queue.front();_queue.pop_front();_nready--;pthread_cond_signal(&_not_full_cond);pthread_mutex_unlock(&_not_empty_mutex);return 0;}private:int _nready;int count;pthread_mutex_t _not_full_mutex;pthread_mutex_t _not_empty_mutex;pthread_cond_t _not_full_cond;pthread_cond_t _not_empty_cond;deque<DataType> _queue;};#endif /* QUEUE_H_ */


原创粉丝点击