首页 > 其他分享 >boost_condition

boost_condition

时间:2023-01-05 23:36:00浏览次数:36  
标签:int LOCK mutex SCOPE include boost condition

  1 #include <boost/thread/thread.hpp>
  2 #include <boost/thread/mutex.hpp>
  3 #include <boost/thread/condition.hpp>
  4 #include <iostream>
  5 using namespace std;
  6 
  7 const int BUF_SIZE = 10;
  8 const int ITERS    = 100;
  9 
 10 boost::mutex io_mutex;
 11 typedef boost::mutex::scoped_lock SCOPE_LOCK;
 12 
 13 class buffer
 14 {
 15 public:    
 16     buffer():p(0),c(0),full(0){ }
 17 
 18     void put(int m)
 19     {
 20         SCOPE_LOCK lock(mutex);
 21         if(full == BUF_SIZE)
 22         {
 23             {
 24                 SCOPE_LOCK locl(io_mutex);
 25                 cout<<"Buffer is full.Wait..."<<endl;
 26             }
 27             while(full == BUF_SIZE)
 28             {
 29                 cond.wait(lock);
 30             }
 31         }
 32         buf[p] = m;
 33         p = (p+1) % BUF_SIZE;
 34         ++full;
 35         cond.notify_one();
 36         //cond.notify_all();
 37     }
 38 
 39     int get()
 40     {
 41         SCOPE_LOCK lock(mutex);
 42         if(full == 0)
 43         {
 44             {
 45                 SCOPE_LOCK locl(io_mutex);
 46                 cout<<"Buffer is empty.Wait..."<<endl;
 47             }
 48             while(full == 0)
 49             {
 50                 cond.wait(lock);
 51             }
 52         }
 53 
 54         int i = buf[c];
 55     
 56         c = (c+1) % BUF_SIZE;
 57         --full;
 58         cond.notify_one();
 59         return i;
 60     }
 61 
 62 
 63 private:
 64     boost::mutex     mutex;
 65     boost::condition cond;
 66     unsigned int p,c,full;
 67     int              buf[BUF_SIZE];
 68 };
 69 
 70 buffer buf;
 71 
 72 void writer()
 73 {
 74     for(int n = 0; n < ITERS;n++)
 75     {
 76         {
 77             SCOPE_LOCK(io_mutex);
 78             cout<<"sending:"<<n<<endl;
 79         }
 80         buf.put(n);
 81     }
 82 }
 83 
 84 void reader()
 85 {
 86     for(int i = 0;i < ITERS;i++)
 87     {
 88         int n = buf.get();
 89         {
 90             SCOPE_LOCK lock(io_mutex);
 91             cout<<"receive:"<<n<<endl;
 92         }
 93     }
 94 }
 95 
 96 int main(int argc, char const *argv[])
 97 {
 98     boost::thread t1(&reader);
 99     boost::thread t2(&writer);
100     t1.join();
101     t2.join();
102 
103     return 0;
104 }

 

标签:int,LOCK,mutex,SCOPE,include,boost,condition
From: https://www.cnblogs.com/sansuiwantong/p/17029125.html

相关文章

  • Windows下用VS2022编译安装Boost库
    Windows下用VS2022编译安装Boost库下载地址:https://www.boost.org/users/download/解压得到如下文件:  编译安装:打开vs2022命令行工具  切换到boost的目......
  • Boosting之Adaboost原理
    Boosting之Adaboost原理1Boosting框架  Boosting可以看成多个不同的基分类器的线性加权和的形式,那么自然需要知道每个基分类器及其对应的权重,具体的算法逻辑见下图。 ......
  • 我的XGBoost学习经历及动手实践
     Datawhale干货 作者:李祖贤 深圳大学,Datawhale高校群成员知乎地址:http://www.zhihu.com/people/meng-di-76-92我今天主要介绍机器学习集成学习方法中三巨头之一的XGBoos......
  • 值得看!!!---大白话5分钟带你走进人工智能-第32节集成学习之最通俗理解XGBoost原理和
    目录如下:本节讲解XGBoost的原理~目录​​1、回顾:​​​​1.1有监督学习中的相关概念​​​​1.2回归树概念​​​​1.3树的优点​​​​2、怎么训练模型:​​​​2.1案例......
  • Condition 条件队列入队和出队的过程
    Condition条件队列入队过程1.初始状态2.线程0调用await方法3.线程1调用await方法Condition条件队列出队过程1.初始状态2.条件队列线程0出队3.条件队......
  • Java同步器之Condition源码分析
    一、概述条件锁就是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。比如,在阻塞队列中,当队列中没有元素的时候是无......
  • springboot利用Condition机制解决Kafka监听不到服务时报错的问题
    一般情况下,我们在写springboot使用Kafka监听的代码时,都是直接写个类,然后在方法上加个@KafkaListener就可以了,简单省事。就像下面这样@Component@Slf4jpublicclassKa......
  • ReentrantLock Condition await signal 专题
     Condition的执行方式,是当在线程T1中调用await方法后,线程T1将释放锁,并且将自己阻塞,等待唤醒,线程T2获取到锁后,开始做事,完毕后,调用Condition的signal方法,唤醒线程T1,在t2执行......
  • 【机器学习】集成学习代码练习(随机森林、GBDT、XGBoost、LightGBM等)
    代码修改并注释:黄海广importwarningswarnings.filterwarnings("ignore")importpandasaspdfromsklearn.model_selectionimporttrain_test_split生成数据生成12000行......
  • SpringBoot - 条件注解 @Conditional
    @ConditiOnBean作用:如果Spring容器里面存在指定的Bean则生效范围:类上,方法上,一般在配置类中使用参数:value参数类型Class[],name参数类型String[]IOC容器中组件的名称......