zoukankan      html  css  js  c++  java
  • CountDownLatch: 用于线程同步的计数器

    适用于以下两种情况:

    1. 主线程发起多个子线程,等这些子线程各自都完成一定的任务之后,主线程才继续执行。通常用于主线程等待多个子线程完成初始化。

    2. 多个子线程等待主线程,主线程完成后全部子线程开始执行。

    /******************************************************************** 
    Description : 主线程调用wait进入阻塞状态,等待计数器变为0。
    *********************************************************************/
    CountDownLatch::CountDownLatch(int count)
      : mutex_(),
        condition_(mutex_),
        count_(count)
    {
    }
    
    /******************************************************************** 
    Description : 主线程调用wait进入阻塞状态,等待计数器变为0。
    *********************************************************************/
    void CountDownLatch::wait()
    {
      MutexLockGuard lock(mutex_);
      while (count_ > 0)
      {
        condition_.wait();
      }
    }
    
    /******************************************************************** 
    Description:子线程调用countDown将计数器减一,计数器变为0唤醒所有线程。
    *********************************************************************/
    void CountDownLatch::countDown()
    {
      MutexLockGuard lock(mutex_);
      --count_;
      if (count_ == 0)
      {
        condition_.notifyAll();
      }
    }
    
    int CountDownLatch::getCount() const
    {
      MutexLockGuard lock(mutex_);
      return count_;
    }
    namespace muduo
    {
    
    class CountDownLatch : noncopyable
    {
     public:
    
      explicit CountDownLatch(int count);
    
      void wait();
    
      void countDown();
    
      int getCount() const;
    
     private:
      mutable MutexLock mutex_;
      Condition condition_ GUARDED_BY(mutex_);
      int count_ GUARDED_BY(mutex_);
    };
    
    }  // namespace muduo

     其中有这么个用法,int xxx GUARDED_BY(_);

    //表示count被锁mutex_所保护,在访问count时会检查是否占有_mutex
    //__attribute__
    int count GUARDED_BY(mutex_);

      

  • 相关阅读:
    用到了yii2 hasMany() 方法,一对多关联
    jquery操作select标签change事件
    Yii2如何批量添加数据
    [bzoj1497][NOI2006]最大获利
    [bzoj]2962序列操作
    洛谷 P1350 车的放置
    洛谷 P1142 轰炸
    初级数论练习题
    洛谷 P3795 钟氏映射
    洛谷 2953 [USACO09OPEN]牛的数字游戏Cow Digit Game
  • 原文地址:https://www.cnblogs.com/BillowJ/p/13440038.html
Copyright © 2011-2022 走看看