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

BlockingQueue

该类是没有上边界的,即在这个队列中,如果为空,是不能进行取走的操作,但是可以一直的往队列中进行添加
muduo/base库学习笔记(10)-----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();
  }