国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux C++ 使用condition實現阻塞隊列的方法

2019-11-02 16:49:36
字體:
來源:轉載
供稿:網友

實例如下:

/* * 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;    }}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃园市| 遵义县| 汤阴县| 全州县| 喀喇沁旗| 沙坪坝区| 贵定县| 乐山市| 金山区| 宁南县| 灵丘县| 崇左市| 和静县| 弋阳县| 保靖县| 佛冈县| 鄂州市| 莱阳市| 方正县| 鄂托克旗| 柯坪县| 蓬溪县| 绍兴市| 历史| 溆浦县| 黎城县| 丰顺县| 无锡市| 淮北市| 阜南县| 齐齐哈尔市| 中超| 青冈县| 宣恩县| 平南县| 尉氏县| 桦甸市| 汉阴县| 寿宁县| 泸西县| 海阳市|