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

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();
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值