[Muduo网络库源码分析] (3) base/CountDownLatch.cc_h_“倒计时门闩”同步
2017-07-31 09:10
639 查看
“倒计时门闩”同步
实现:CountDownLatch类
功能:利用条件变量、倒计时实现同步
知识点:
mutable:mutable修饰符表示其可以在任何情况下变化条件变量
互斥锁
用途:
用于实现倒计时同步
代码及分析:
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> #include <boost/noncopyable.hpp> namespace muduo { class CountDownLatch : boost::noncopyable { public: //构造函数,初始化倒计时变量 explicit CountDownLatch(int count); //等待count_为0 void wait(); //变量减一 void countDown(); //返回变量值 int getCount() const; private: mutable MutexLock mutex_;//互斥锁,mutable修饰符表示其可以在任何情况下变化 Condition condition_;//条件变量 int count_; //计时数 }; } #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) { } //等待变量到0 void CountDownLatch::wait() { MutexLockGuard lock(mutex_); while (count_ > 0) { condition_.wait(); } } //对变量减一,如果其为0,则唤醒等待的进程 void CountDownLatch::countDown() { MutexLockGuard lock(mutex_); --count_; if (count_ == 0) { condition_.notifyAll(); } } //返回计数递减变量值 int CountDownLatch::getCount() const { MutexLockGuard lock(mutex_); return count_; }
相关文章推荐
- [Muduo网络库源码分析] (9) base/Thread.cc_h_CurrentThread_h线程对象
- [Muduo网络库源码分析] (2) base/Condition.cc_h_条件变量操作
- [Muduo网络库源码分析] (4) base/Exception_cc_h_带 stack trace 的异常基类
- [Muduo网络库源码分析] (10) base/ThreadPoll_cc_h_线程池
- [Muduo网络库源码分析] (5) base/FileUtil.cc_h_文件操作
- [Muduo网络库源码分析] (8) base/StringPiece.h_字符串参数传递类型
- 【JUC】JDK1.8源码分析之CountDownLatch(五)
- Semaphore CountDownLatch CyclicBarrier 源码分析
- Android 关于 CountDownTimer onTick() 倒计时不准确问题源码分析
- [Muduo网络库源码分析] (1) base/Atomic.h_原子操作与原子整数
- JUC - CountDownLatch 源码分析
- AbstractQueuedSynchronizer详解(二)——CountDownLatch源码分析
- 根据AQS推测CountDownLatch及源码分析
- [Muduo网络库源码分析] (11) base/Types.h_基本类型声明
- [Muduo网络库源码分析] (6) base/Mutex.h_互斥锁操作
- jdk 源码分析(15)java CountDownLatch 源码解析
- [Muduo网络库源码分析] (7) base/Singleton.h_SINGLETON对象创建型模式
- Java并发Concurrent包的锁(六)——CountDownLatch源码分析及使用
- Java并发系列之CountDownLatch源码分析
- Android base-adapter-helper 源码分析与扩展