muduo/base库学习笔记(10)-----BlockingQueue类

BlockingQueue

该类是没有上边界的,即在这个队列中,如果为空,是不能进行取走的操作,但是可以一直的往队列中进行添加
在这里插入图片描述

1 构造函数的实现

BlockingQueue()
    : mutex_(),
      notEmpty_(mutex_),
      queue_()
  {
  }

2 成员函数的实现

void put(const T& x)

void put(const T& x)
  {
   //在对队列进行操作的时候,首先要锁住这个队列
    MutexLockGuard lock(mutex_);
    queue_.push_back(x);
    //每添加一个元素,就通知所有的线程
    notEmpty_.notify(); // wait morphing saves us
  }

T take()函数的实现

 T take()
  {
    MutexLockGuard lock(mutex_);
   //如果说队列为空,就一直阻塞等待
    while (queue_.empty())
    {
      notEmpty_.wait();
    }
    assert(!queue_.empty());
    //去除队列中的产品
    T front(std::move(queue_.front()));
    //删除已经取出的产品
    queue_.pop_front();
    return std::move(front);
  }

size_t size() const函数的实现

size_t size() const
  {
    MutexLockGuard lock(mutex_);
    return queue_.size();
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值