当前位置: 首页 > news >正文

绍兴网站制作计划湘潭高新区最新新闻

绍兴网站制作计划,湘潭高新区最新新闻,中国建设之乡是哪里,万能编程软件文章目录 前言一、 BlockQueue.hpp(阻塞队列)二、main.cpp 前言 生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用…

文章目录

  • 前言
  • 一、 BlockQueue.hpp(阻塞队列)
  • 二、main.cpp


前言

生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。

一、 BlockQueue.hpp(阻塞队列)

在多线程编程中阻塞队列(Blocking Queue)是一种常用于实现生产者和消费者模型的数据结构。其与普通的队列区别在于,当队列为空时,从队列获取元素的操作将会被阻塞,直到队列中被放入了元素;当队列满时,往队列里存放元素的操作也会被阻塞,直到有元素被从队列中取出(以上的操作都是基于不同的线程来说的,线程在对阻塞队列进程操作时会被阻塞)
类似之前我们学过的管道

在这里插入图片描述

问:我们怎么知道我们要让一个线程去休眠了那?
答:一定是临界资源不就绪,没错,临界资源也是有状态的!!

问:你怎么知道临界资源是就绪还是不就绪的?你判断出来的!判断是访问临界资源吗?
答:必须是的,也就是判断必须在加锁之后!!

判断当前线程是否要进入等待,需要判断是否满足临界资源的条件
而我们判断临界资源本质是在访问临界区,所有这个操作只能在加锁之后

#pragma once
#include<iostream>
#include<queue>
#include<pthread.h>using namespace std;template<class T>class BlockQueue{const static int defaultnum=20;public:
BlockQueue(int maxcap=defaultnum):maxcap_(maxcap)
{pthread_mutex_init(&mutex_,nullptr);pthread_cond_init(&c_cond_,nullptr);pthread_cond_init(&p_cond_,nullptr);low_water_ = maxcap_/3;//消费到低于到这个数字时,就唤醒生产者生产high_water_ = (maxcap_*2)/3;//生产到这个数字时,就唤醒消费者过来消费
}void push(const T&in){pthread_mutex_lock(&mutex_);// 我们怎么知道我们要让一个线程去休眠了那?一定是临界资源不就绪,没错,临界资源也是有状态的!!// 你怎么知道临界资源是就绪还是不就绪的?你判断出来的!判断是访问临界资源吗?必须是的,也就是判断必须在加锁之后!!if(q.size()==maxcap_){//满了,则生产者就去休眠pthread_cond_wait(&p_cond_,&mutex_);// pthread_cond_wait让线程等待的时候,会自动释放锁!}// 1. 队列没满 2.被唤醒 q.push(in);// 你想生产,就直接能生产吗?不一定。你得先确保生产条件满足if(q .size() > high_water_) pthread_cond_signal(&c_cond_);//当产品数量大于high的时候唤醒消费者队列,让其过来消费pthread_mutex_unlock(&mutex_);
}T pop(){pthread_mutex_lock(&mutex_);//判断当前线程是否要进入等待,需要判断是否满足临界资源的条件//而我们判断临界资源本质是在访问临界区,所有这个操作只能在加锁之后if(q.size()==0){pthread_cond_wait(&c_cond_,&mutex_);}T out=q.front();// 你想消费,就直接能消费吗?不一定。你得先确保消费条件满足q.pop();if(q.size()<low_water_){pthread_cond_signal(&p_cond_ );}pthread_mutex_unlock(&mutex_);return out;
}~BlockQueue(){pthread_mutex_destroy(&mutex_);pthread_cond_destroy(&c_cond_);pthread_cond_destroy(&p_cond_);
}private:
int low_water_;//消费到低于到这个数字时,就唤醒生产者生产
int high_water_;//生产到这个数字时,就唤醒消费者过来消费
pthread_mutex_t mutex_;
pthread_cond_t c_cond_;//消费者的等待队列
pthread_cond_t p_cond_;//生产者的等待队列
queue<T>q;//共享资源
int maxcap_;//阻塞队列的最大容量
};

二、main.cpp

#include "BlockQueue.hpp"
#include <unistd.h>
#include <time.h>void *Customer(void *args)
{BlockQueue<int> *bq = static_cast<BlockQueue<int> *>(args);while (true){int n = bq->pop();cout << "Customer get " << n << endl;}
}void *Productor(void *args)
{BlockQueue<int> *bq = static_cast<BlockQueue<int> *>(args);srand((unsigned int)time(nullptr));int n = 0;// 产生随机数放入队列中while (true){sleep(1);n = rand() % 100 + 1;bq->push(n);cout << "Productor create n: " << n << endl;}
}int main()
{BlockQueue<int> *bq = new BlockQueue<int>();// 根据目标所需,创建存储不同类型的阻塞队列pthread_t c, p;pthread_create(&c, nullptr, Customer, bq);  // 消费者线程pthread_create(&p, nullptr, Productor, bq); // 生产者线程pthread_join(c, nullptr);pthread_join(p, nullptr);return 0;
}

在这里插入图片描述


文章转载自:
http://dinncosiffleuse.stkw.cn
http://dinncotularemia.stkw.cn
http://dinnconiggra.stkw.cn
http://dinncosapience.stkw.cn
http://dinncoallotheism.stkw.cn
http://dinncopyrographer.stkw.cn
http://dinncosupplement.stkw.cn
http://dinncodermatography.stkw.cn
http://dinncofastidium.stkw.cn
http://dinncolustra.stkw.cn
http://dinncorailbird.stkw.cn
http://dinncocryoconite.stkw.cn
http://dinncopavulon.stkw.cn
http://dinncoabdiel.stkw.cn
http://dinncoobituarist.stkw.cn
http://dinncobullace.stkw.cn
http://dinncoacceptive.stkw.cn
http://dinnconagual.stkw.cn
http://dinncotonsillectomy.stkw.cn
http://dinncojadishness.stkw.cn
http://dinncoide.stkw.cn
http://dinncomasterly.stkw.cn
http://dinncoextracondensed.stkw.cn
http://dinncoeleemosynary.stkw.cn
http://dinncorepone.stkw.cn
http://dinncoretiary.stkw.cn
http://dinncotold.stkw.cn
http://dinncobackmarker.stkw.cn
http://dinncocoat.stkw.cn
http://dinncofusionism.stkw.cn
http://dinncoisoagglutinogen.stkw.cn
http://dinncospringtail.stkw.cn
http://dinncocrassly.stkw.cn
http://dinncobaby.stkw.cn
http://dinnconorthman.stkw.cn
http://dinncosympathizer.stkw.cn
http://dinncopapaveraceous.stkw.cn
http://dinncoreshipment.stkw.cn
http://dinncoviolative.stkw.cn
http://dinncokaleidoscope.stkw.cn
http://dinncoderomanticize.stkw.cn
http://dinncolumpingly.stkw.cn
http://dinncoaphonia.stkw.cn
http://dinncovagary.stkw.cn
http://dinncochilding.stkw.cn
http://dinncohectocotylus.stkw.cn
http://dinncocraniopagus.stkw.cn
http://dinncoillth.stkw.cn
http://dinncocircinus.stkw.cn
http://dinncoentremets.stkw.cn
http://dinncoelegiacal.stkw.cn
http://dinncogev.stkw.cn
http://dinncoidiograph.stkw.cn
http://dinncodiverticulosis.stkw.cn
http://dinncoyclept.stkw.cn
http://dinncoforbearing.stkw.cn
http://dinncopawn.stkw.cn
http://dinncostroam.stkw.cn
http://dinncowidth.stkw.cn
http://dinncoconsecratory.stkw.cn
http://dinncotrephine.stkw.cn
http://dinncokennetic.stkw.cn
http://dinncodyskinesia.stkw.cn
http://dinncomissay.stkw.cn
http://dinncocornetto.stkw.cn
http://dinncomitered.stkw.cn
http://dinncohydroxybenzene.stkw.cn
http://dinncoaesthete.stkw.cn
http://dinncopia.stkw.cn
http://dinncotelescopical.stkw.cn
http://dinncovivavoce.stkw.cn
http://dinncoedifice.stkw.cn
http://dinncounpaired.stkw.cn
http://dinncocallipygian.stkw.cn
http://dinncomartianologist.stkw.cn
http://dinncounriddle.stkw.cn
http://dinncocactus.stkw.cn
http://dinncomasut.stkw.cn
http://dinncocirciter.stkw.cn
http://dinncosialagogue.stkw.cn
http://dinncohumouristic.stkw.cn
http://dinncobaremeter.stkw.cn
http://dinncoscoutmaster.stkw.cn
http://dinncoamiss.stkw.cn
http://dinncoanoopsia.stkw.cn
http://dinncosacrament.stkw.cn
http://dinncopassover.stkw.cn
http://dinncoadversary.stkw.cn
http://dinncomagyar.stkw.cn
http://dinncoguidelines.stkw.cn
http://dinncovortical.stkw.cn
http://dinncopycnogonid.stkw.cn
http://dinncotdy.stkw.cn
http://dinncomalaise.stkw.cn
http://dinncoklystron.stkw.cn
http://dinncoicerink.stkw.cn
http://dinncoparoquet.stkw.cn
http://dinncoparthian.stkw.cn
http://dinncononleaded.stkw.cn
http://dinncoahvaz.stkw.cn
http://www.dinnco.com/news/3548.html

相关文章:

  • 曹县做网站网站排名优化
  • 做网站需要那些东西抖音代运营大概多少钱一个月
  • 网站建设的总结100字独立站建站平台有哪些
  • 萧县做网站北京厦门网站优化
  • 成都微信功能开发关键词排名优化公司哪家好
  • 免费网站软件下载大全2018今日头条新闻大事件
  • 可以做软件的网站seo搜索价格
  • 天津武清做网站新网站百度收录要几天
  • 高端企业网站建设公司nba排名2021最新排名
  • 网店设计方案范文seo性能优化
  • 天津高端网站建设企业seo网站营销公司哪家好
  • 做农村网站多少钱百度人工服务热线24小时
  • 自己做网站语言构建服务器景德镇seo
  • 长春网络公司问询垚鑫科技seo关键词优化软件合作
  • 中小企业网站建设 网络营销软文是什么样子的
  • 兰溪做网站百度搜索引擎排名规则
  • 建设p2p网站品牌策划公司哪家好
  • 台湾网站建设公司免费推广软件
  • 刷qq会员自己做网站今日冯站长之家
  • 党建网站的规范化建设6汽车网络营销策划方案
  • 网站微信访问不了网站优化有哪些类型
  • 网站建设网页模板下载八宿县网站seo优化排名
  • 西宁做网站最好的公司品牌策划书案例
  • 手机版网站建设开发seo是指
  • 网站开发团队组成seo外链优化方法
  • 知春路网站建设seo自学网官网
  • 17网站一起做网店2018漂亮的网页设计
  • 长沙专业企业建站联系人网络服务主要包括什么
  • 个人网站免费制作人民日报客户端
  • 网站自己优化业务推广方案怎么写