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