muduo之CountDownLatch.cc
CountDownLatch用线程同步的。
CountDownLatch.h
// Use of this source code is governed by a BSD-style license
// that can be found in the License file.
//
// Author: Shuo Chen (chenshuo at chenshuo dot com)#ifndef MUDUO_BASE_COUNTDOWNLATCH_H
#define MUDUO_BASE_COUNTDOWNLATCH_H#include "muduo/base/Condition.h"
#include "muduo/base/Mutex.h"namespace muduo
{
//对 Condition(条件变量)的封装,通过倒计时计数器的方式,设置计数
class CountDownLatch : noncopyable
{public:explicit CountDownLatch(int count); //count是线程的数量void wait();void countDown();int getCount() const;private: //CountDownLatch由一把锁,条件变量,计数器构成mutable MutexLock mutex_;Condition condition_ GUARDED_BY(mutex_);int count_ GUARDED_BY(mutex_);//count是线程的数量
};} // namespace muduo
#endif // MUDUO_BASE_COUNTDOWNLATCH_H
CountDownLatch.cc
// Use of this source code is governed by a BSD-style license
// that can be found in the License file.
//
// Author: Shuo Chen (chenshuo at chenshuo dot com)#include "muduo/base/CountDownLatch.h"using namespace muduo;CountDownLatch::CountDownLatch(int count)//倒计时计数器: mutex_(),condition_(mutex_), //初始化,条件变量用成员锁初始化count_(count)
{
}void CountDownLatch::wait()
{MutexLockGuard lock(mutex_);while (count_ > 0) //只要计数值大于0,CountDownLatch类就不工作,知道等待计数值为0{condition_.wait();}
}void CountDownLatch::countDown() //倒数,倒计时
{MutexLockGuard lock(mutex_);--count_;if (count_ == 0){condition_.notifyAll();}
}int CountDownLatch::getCount() const //获得次数
{MutexLockGuard lock(mutex_);return count_;
}
muduo之CountDownLatch.cc相关推荐
- muduo之Thread
muduo也对线程进行了封装,下面看一下实现. Thread.h // Use of this source code is governed by a BSD-style license // th ...
- muduo学习笔记 线程类
learn_muduo 线程属性 线程标识 pthreadId_,pid_t 线程函数 func_ 线程名字 name_ 线程序号 numCreated_ bool started_; // 线程状态 ...
- Muduo 设计与实现之一:Buffer 类的设计
[开源访谈]Muduo 作者陈硕访谈实录 http://www.oschina.net/question/28_61182 开源访谈是开源中国推出的一系列针对国内优秀开源软件作者的访谈,以文字的方式记 ...
- muduo库的高性能日志库(三)——Logging文件
目录 SourceFile内部类 Impl内部类 内部实现细节 Logger类 1. 规定日志的几个等级 2. 两个内部类 3. 设置日志属性 4. 构造函数 5. 析构函数 日志宏 接下看一下Log ...
- muduo网络库——ThreadPool
模型 源码分析 1)接口 class ThreadPool : noncopyable {public:typedef std::function<void ()> Task;explic ...
- muduo网络库:18---muduo简介之(muduo库的由来、编译安装、目录结构、代码结构、线程模型)
一.由来 2010年3月陈硕先生写了一篇<学之者生,用之者死--ACE历史与简评>(文章参阅:https://blog.csdn.net/Solstice/article/details/ ...
- 16muduo_base库源码分析(七)
1.ThreadPool类图 2.代码 (1)线程池的数据是固定的 (2)无界缓冲区queue ThreadPool.h // Use of this source code is governed ...
- 15muduo_base库源码分析(六)
1.BoundedBlockingQueue<T>(有界缓冲区) BoundedBlockingQueue.h // Use of this source code is governed ...
- zookeeper配置中心
场景 多个客户端从zookeeper 的配置中心拿到配置,如果配置中心没有配置就阻塞,如果配置修改了就拿到新的. 原理 因为zookeeper的同步性质,即单线程的分两段式(当发生修改时,第一阶段:l ...
最新文章
- OpenVINO2021.4+YOLOX目标检测模型部署测试
- 为了帮视障人士“看见”,阿里工程师做了哪些努力?
- 笔记函数 - 判断内存是否有效
- 重拾python Day 1
- SAP CRM Long text unit test preparation
- 用CSS3来代替JS实现交互
- linux 操作mysql 数据库命令_Linux 操作数据库命令
- 50.分治算法练习: 二分算法: 2703 奶牛代理商 XII
- 小白Linux入门之:常用命令介绍
- 盛大如何再次“盛大”
- Matlab吴恩达机器学习编程练习ex5:正则化线性回归和偏差v.s. 方差Regularized Linear Regression and Bias v.s. Variance
- C语言半框,如何挑选适合自己的镜框(镜片)?
- sql升级重启计算机失败win10,win10系统电脑安装sql server需要一直重启的解决方法...
- Java整合ORC识别验证码
- CentOS7常用yum仓库操作及安装
- 什么是数据分析报告,主要有什么价值?
- Python 实现office单个文件或整个文件夹(word,ppt,excel)转换成PDF文件,并获取PDF文件页数
- 【JavaScript】VUE前端实现微信版录制音频wav格式转化成mp3格式和Base64
- 宝塔搭建TY博客附好看模板
- mysql设置初始密码(linux)