全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Linux C++ 使用condition实现阻塞队列的方法

实例如下:

/*
 * 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(&notFull,NULL);
    pthread_cond_init(&notEmpty,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(&notFull,NULL);
    pthread_cond_init(&notEmpty,NULL);

}

BlockingQueue::~BlockingQueue()
{
    this->capacity = 0;
    head = 0,tail = 0;
    delete queue;
    pthread_mutex_destroy(&mutex);
    pthread_cond_destroy(&notFull);
    pthread_cond_destroy(&notEmpty);
}

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(&notFull,&mutex);
        cout << "not full,unlock" << endl;
    }

    {
        queue[head] = item;
        head = (head + 1) % capacity;
        cout << "push " << item << endl;
        //wake up poll thread
        pthread_cond_signal(&notEmpty);
        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(&notEmpty,&mutex);
        cout << "not empty,unlock..." << endl;
    }
    {
        ret = queue[tail];
        tail = (tail + 1) % capacity;
        cout << "take " << ret << endl;
        //wake up push thread
        pthread_cond_signal(&notFull);

        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小时内与您取得联系。