#include <muduo/base/Condition.h>
#include <muduo/base/Mutex.h>
#include <boost/noncopyable.hpp>
#include <deque>
#include <assert.h>
template<typename T>
class BlockingQueue : boost::noncopyable
{
public:
BlockingQueue(): mutex_(),notEmpty_(mutex_),queue_(){}
void put(const T& x)
{
MutexLockGuard lock(mutex_);//安全加锁pthread_mutex_t
queue_.push_back(x);
notEmpty_.notify(); // wait morphing saves us
// http://www.domaigne.com/blog/computing/condvars-signal-with-mutex-locked-or-not/
}
T take()
{
MutexLockGuard lock(mutex_);
// always use a while-loop, due to spurious wakeup
while (queue_.empty())
{
notEmpty_.wait();
}
assert(!queue_.empty());
T front(queue_.front());
queue_.pop_front();
return front;
}
size_t size() const
{
MutexLockGuard lock(mutex_);
Muduo里的blockingQueue实现线程池伪码
最新推荐文章于 2022-03-30 15:06:41 发布