muduo/base库学习笔记(11)-----BoundedBlockingQueue类

BoundedBlockingQueue

该类和上一个相比区别在于,这是有上边界的,当队列为满的时候,不能进行添加操作,当队列为空的时候,不能进行删除操作。
并且该队列是一个循环队列

muduo/base库学习笔记(11)-----BoundedBlockingQueue类

1 构造函数的实现

//这是一个有参数的构造函数,里面的参数是队列的最大容量
explicit BoundedBlockingQueue(int maxSize)
    : mutex_(),
      notEmpty_(mutex_),
      notFull_(mutex_),
      queue_(maxSize)
  {
  }

2 成员函数的实现

void put(const T& x)函数的实现。
当队列不满的时候,可以进行添加操作,否则阻塞等待。
添加一个元素,不为空的条件变量就通知线程

 void put(const T& x)
  {
    MutexLockGuard lock(mutex_);
    //当队列满的时候,不为满的条件变量就在这里阻塞等待
    while (queue_.full())
    {
      notFull_.wait();
    }
    assert(!queue_.full());
    queue_.push_back(x);
    notEmpty_.notify();
  }


T take()函数的实现。
当队列为空的时候,不为空的条件变量就阻塞等待。
当删除(取走)队列中的元素的时候,不为满的条件变量就通知线程

 T take()
  {
    MutexLockGuard lock(mutex_);
    while (queue_.empty())
    {
      notEmpty_.wait();
    }
    assert(!queue_.empty());
    T front(std::move(queue_.front()));
    queue_.pop_front();
    notFull_.notify();
    return std::move(front);
  }

bool empty() const函数的实现

 bool empty() const
  {
    MutexLockGuard lock(mutex_);
    return queue_.empty();
  }

** bool full() const函数的实现**

 bool full() const
  {
    MutexLockGuard lock(mutex_);
    return queue_.full();
  }

size_t size() const函数的实现

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

** size_t capacity() const函数的实现**

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