• muduo 库解析之十:CountDownLatch


    源码

    CountDownLatch.h

    #pragma once
    #include "Mutex.h"
    #include "Condition.h"
    #include "NonCopyable.h"
    
    namespace muduo
    {
        class CountDownLatch : public NonCopyable
        {
        public:
            explicit CountDownLatch(int count);
    
            void wait();
            void count_down();
            int get_count() const;
    
        private:
            mutable MutexLock mutex_;
            int count_;
            Condition condition_;
        };
    
    } // namespace muduo
    

    CountDownLatch.cc

    #include "CountDownLatch.h"
    
    namespace muduo
    {
        CountDownLatch::CountDownLatch(int count) : mutex_(), count_(count), condition_(mutex_)
        {
        }
    
        void CountDownLatch::wait()
        {
            MutexLockGuard lock(mutex_);
            while (count_ > 0)
            {
                condition_.wait();
            }
        }
    
        void CountDownLatch::count_down()
        {
            MutexLockGuard lock(mutex_);
            --count_;
            if (count_ == 0)
            {
                condition_.notify_all();
            }
        }
    
        int CountDownLatch::get_count() const
        {
            MutexLockGuard lock(mutex_);
            return count_;
        }
    }
    
  • 相关阅读:
    【CF 359B】Permutation
    如何更新 DevC++ 的编译器
    【LG 2801】教主的魔法
    矩阵浅谈
    NOI 系列赛常见技术问题整理
    Treap 浅谈
    DP 优化浅谈
    友链
    【CF 708C】Centroids
    我跳过的坑
  • 原文地址:https://www.cnblogs.com/xiaojianliu/p/14699957.html
Copyright © 2020-2023  润新知