生产者与消费者模式是解决并发的有效手段。
缓冲队列
muduo实现了两种缓冲队列:有界缓冲队列和无边界缓冲队列
无边界缓冲队列BlockingQueue比较简单,成员数据如下:
mutable MutexLock mutex_;
Condition notEmpty_;
std::deque<T> queue_;
逻辑:
有界缓冲队列BoundedBlockingQueue类成员数据如下:
mutable MutexLock mutex_;
Condition notEmpty_;
Condition notFull_;
boost::circular_buffer<T> queue_;
逻辑:
线程池
线程池的模型与有界缓冲队列逻辑上差不多(不知为何没有选取循环队列存取任务)。
除去逻辑一致的成员外,ThreadPool还有如下成员:
string name_;
Task threadInitCallback_;
boost::ptr_vector<muduo::Thread> threads_;
bool running_;
最重要的是threads_,线程池中线程从队列中取任务执行。