实例如下:
/*
* BlockingQueue.h
*
* Created on: 2014年6月10日
* Author:
*/
#ifndef BLOCKINGQUEUE_H_
#define BLOCKINGQUEUE_H_
#include <iostream>
#include <pthread.h>
using namespace std;
//template <typename T >
class BlockingQueue
{
public:
BlockingQueue();
BlockingQueue(int capacity);
~BlockingQueue();
bool push(int item);
int poll();
private:
int capacity;
int* queue;
int head,tail;
pthread_mutex_t mutex;
pthread_cond_t notFull,notEmpty;
};
#endif /* BLOCKINGQUEUE_H_ */
/*
* BlockingQueue.cpp
*
* Created on: 2014年6月10日
* Author:
*/
#include "../include/BlockingQueue.h"
BlockingQueue::BlockingQueue()
{
this->capacity = 10;
queue = new int[capacity];
head = 0,tail = 0;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(¬Full,NULL);
pthread_cond_init(¬Empty,NULL);
}
BlockingQueue::BlockingQueue(int capacity)
{
this->capacity = capacity;
queue = new int[capacity];
cout << "capacity " << sizeof(queue) << endl;
head = 0,tail = 0;
pthread_mutex_init(&mutex,NULL);
pthread_cond_init(¬Full,NULL);
pthread_cond_init(¬Empty,NULL);
}
BlockingQueue::~BlockingQueue()
{
this->capacity = 0;
head = 0,tail = 0;
delete queue;
pthread_mutex_destroy(&mutex);
pthread_cond_destroy(¬Full);
pthread_cond_destroy(¬Empty);
}
bool BlockingQueue::push(int item)
{
pthread_mutex_lock(&mutex);
cout << "you want push " << item << endl;
while((head + 1) % capacity == tail)//is full
{
cout << "is full,wait..." << endl;
// push wait
pthread_cond_wait(¬Full,&mutex);
cout << "not full,unlock" << endl;
}
{
queue[head] = item;
head = (head + 1) % capacity;
cout << "push " << item << endl;
//wake up poll thread
pthread_cond_signal(¬Empty);
pthread_mutex_unlock(&mutex);
return true;
}
}
int BlockingQueue::poll()
{
pthread_mutex_lock(&mutex);
int ret = 0;
while(head == tail) // is empty
{
cout << "is empty,wait..." << endl;
//poll wait
pthread_cond_wait(¬Empty,&mutex);
cout << "not empty,unlock..." << endl;
}
{
ret = queue[tail];
tail = (tail + 1) % capacity;
cout << "take " << ret << endl;
//wake up push thread
pthread_cond_signal(¬Full);
pthread_mutex_unlock(&mutex);
return ret;
}
}
#include <iostream>
#include "include/BlockingQueue.h"
using namespace std;
BlockingQueue queue(3);
void* put(void *)
{
queue.push(1);
queue.push(2);
queue.push(3);
queue.push(4);
queue.push(5);
return NULL;
}
void* take(void *)
{
queue.poll();
queue.poll();
queue.poll();
return NULL;
}
int main() {
pthread_t put1,take1;
pthread_create(&put1,NULL,put,0);
pthread_create(&take1,NULL,take,0);
void * retval;
pthread_join(put1,&retval);
pthread_join(take1,&retval);
return 0;
}
以上就是小编为大家带来的Linux C++ 使用condition实现阻塞队列的方法全部内容了,希望大家多多支持~
# 阻塞队列实现
# 利用C++如何实现一个阻塞队列详解
# 小编
# 大家多多
# typename
# template
# public
# int
# capacity
# gt
# iostream
# pthread
# std
# namespace
# head
# queue
# tail
# mutex
# pthread_mutex_t
# push
# bool
# item
相关文章:
台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
无锡营销型网站制作公司,无锡网选车牌流程?
如何用免费手机建站系统零基础打造专业网站?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
制作网站外包平台,自动化接单网站有哪些?
,制作一个手机app网站要多少钱?
江苏网站制作公司有哪些,江苏书法考级官方网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
黑客如何通过漏洞一步步攻陷网站服务器?
如何在建站宝盒中设置产品搜索功能?
寿县云建站:智能SEO优化与多行业模板快速上线指南
微信推文制作网站有哪些,怎么做微信推文,急?
定制建站哪家更专业可靠?推荐榜单揭晓
如何通过FTP服务器快速搭建网站?
音乐网站服务器如何优化API响应速度?
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何用腾讯建站主机快速创建免费网站?
宝塔新建站点报错如何解决?
如何彻底卸载建站之星软件?
如何选择可靠的免备案建站服务器?
香港服务器部署网站为何提示未备案?
建站之星在线客服如何快速接入解答?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
建站之星如何优化SEO以实现高效排名?
全景视频制作网站有哪些,全景图怎么做成网页?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
建站主机与服务器功能差异如何区分?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何续费美橙建站之星域名及服务?
css网站制作参考文献有哪些,易聊怎么注册?
网站制作免费,什么网站能看正片电影?
制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
建站主机CVM配置优化、SEO策略与性能提升指南
网站制作说明怎么写,简述网页设计的流程并说明原因?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
黑客如何利用漏洞与弱口令入侵网站服务器?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何做网站制作流程,*游戏网站怎么搭建?
如何在建站之星网店版论坛获取技术支持?
做企业网站制作流程,企业网站制作基本流程有哪些?
郑州企业网站制作公司,郑州招聘网站有哪些?
建站主机服务器选型指南与性能优化方案解析
如何用好域名打造高点击率的自主建站?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何快速搭建高效WAP手机网站吸引移动用户?
*请认真填写需求信息,我们会在24小时内与您取得联系。