大旗谷资源网 Design By www.zqyou.com
实例如下:
/* * 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实现阻塞队列的方法全部内容了,希望大家多多支持~
标签:
阻塞队列实现
大旗谷资源网 Design By www.zqyou.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
大旗谷资源网 Design By www.zqyou.com
暂无Linux C++ 使用condition实现阻塞队列的方法的评论...
更新日志
2024年09月20日
2024年09月20日
- 曾轶可.2011-一只猫的旅行【天娱传媒】【WAV+CUE】
- 黑神话悟空上品狼刺客精魄获取方法一览|上品狼刺客精魄收集攻略
- 视觉小说《神椿市建设中REGENERATE》将于2025年2月20日发售
- 黑神话悟空上品鼠弩手精魄获取方法一览|上品鼠弩手精魄收集攻略
- 中国音乐地图听见世界非物质文化遗产《非遗HQCD》wav
- 中国民乐合奏作品集《华夏之音HQ》头版限量编号[WAV+CUE]
- [电影原声带]黎允文《天将雄师》[FLAC+CUE]
- 曝NS继任机型已进入量产阶段:已花了30亿日元
- 不是Switch2?曝《马里奥惊奇》NS捆绑包即将公开
- 暖心任天堂!网友Switch维修返还时贴纸被完好保留
- 《国语老歌 经典对唱情歌 2CD》[WAV/分轨][1.1GB]
- 《刀郎 翻唱精选华语专辑 披着羊皮的狼 》[WAV+CUE][430MB]
- 《真的田震 中国乐坛红极一时的歌者 精品集》[WAV+CUE][300MB]
- 群星.1995-新滚石九大天王之情歌大全【滚石】【WAV+CUE】
- 群星.1993-滚石九大天王十二出好戏·纵夏欢唱【滚石】【WAV+CUE】