muduo网络库base篇四:生产者/消费者

生产者与消费者模式是解决并发的有效手段。

缓冲队列

muduo实现了两种缓冲队列:有界缓冲队列和无边界缓冲队列
无边界缓冲队列BlockingQueue比较简单,成员数据如下:

mutable MutexLock mutex_;
Condition         notEmpty_;
std::deque<T>     queue_;

逻辑:

Created with Raphaël 2.1.2 生产者 生产者 消费者 消费者 我生产了一个产品 我生产了一个产品 if(queue.empty) wait; 消费 ...... ......

有界缓冲队列BoundedBlockingQueue类成员数据如下:

mutable MutexLock          mutex_;
Condition                  notEmpty_;
Condition                  notFull_;
boost::circular_buffer<T>  queue_;

逻辑:

Created with Raphaël 2.1.2 生产者 生产者 消费者 消费者 我生产了一个产品 while(queue.full) wait; 生产 ...... 我消费了一个产品 while(queue.empty) wait; 消费 ......

线程池

线程池的模型与有界缓冲队列逻辑上差不多(不知为何没有选取循环队列存取任务)。
除去逻辑一致的成员外,ThreadPool还有如下成员:

string name_;
Task threadInitCallback_;
boost::ptr_vector<muduo::Thread> threads_;
bool running_;

最重要的是threads_,线程池中线程从队列中取任务执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值