muduo库中对线程池的实现(1)
来源:互联网 发布:金鼎网络微营销软件 编辑:程序博客网 时间:2024/06/05 08:01
在学muduo库之前,我只知道一点线程池的概念,但是对于怎么实现线程池完全不了解,最近因为被分配到了一个实验室里项目小组,于是开始学习muduo库。
在看了几遍muduo库中的ThreadPool线程池类的实现之后,感觉对线程池有了一些了解,就简单对muduo库是如何实现线程池做一些简单的说明,顺便加深一下记忆。
前置知识:
1. linux下线程的创建使用
2. 线程锁的初步了解
3. 线程条件变量的初步了解
实现思路:
1. 声明一个任务列表(std::dequeue<boost::function<void()>> queue_;),定义一个接口给外部传递任务进来(任务类型是函数指针)
2. 定义两个线程用条件变量:
Condition notEmpty;
Condition notFull;
notEmpty 用来告知线程池里面的线程当前是否有尚未执行的任务(即任务列表是否空)
notFull 用来告知传递任务的线程当前线程池的任务列表是否已经塞满
3. 定义一个函数给线程池里的线程来运行,该函数主要的作用是抓取任务列表中的任务
因为任务是函数指针(其实是boost::function),所以当抓取到任务后直接运行抓取到的任务函数就好了,运行好之后会返回,开始下一轮的抓取,并通知其他线程自己已经空闲了。
muduo::ThreadPool类的使用
/********************************************************* * Author : crazy_mad * Last modified : 2017-04-13 21:19 * Filename : main.cc * Description : 测试muduo中的ThreadPool线程池 *********************************************************/#include <muduo/base/ThreadPool.h>#include <boost/bind.hpp>#include <iostream>#include <string>#include <stdio.h>#include <unistd.h>#include <time.h>using namespace std;using namespace muduo;void say_1() {cout << "this is say_1" << endl;}void say_2(std::string line) {cout << line << endl;}int main() {ThreadPool pool_("crazymad's pool");pool_.setMaxQueueSize(10);// 设置任务列表容量pool_.start(2);// 开启两个线程pool_.run(say_1);// 传入任务pool_.run(boost::bind(say_2, std::string("hello world")));pool_.run(boost::bind(say_2, std::string("crazy_mad很帅")));sleep(1);// ThreadPool没有等待子线程运行完毕的机制,这里为了方便就手动等一秒钟好了return 0;}
0 0
- muduo库中对线程池的实现(1)
- muduo库中对线程池的实现(2)
- muduo网络库学习笔记(5):线程池的实现
- muduo源码分析--线程池的实现
- Muduo里的blockingQueue实现线程池伪码
- muduo:线程池
- 【muduo】线程池
- muduo网络库:线程之间的同步机制(使用eventfd函数,条件变量,线程池)
- muduo网络库源码学习————线程池实现
- muduo网络库定时器的实现
- muduo网络库定时器的实现
- muduo网络库中buffer的设计
- muduo网络库中buffer的设计
- muduo网络库学习笔记(6):单例类(线程安全的)
- muduo库TcpConnection对send、shutdown、SIGPIPE的处理
- muduo库阅读(9)——线程池
- [Muduo网络库源码分析] (10) base/ThreadPoll_cc_h_线程池
- Muduo库源码分析(7):线程池
- 用Java Robot实现屏幕截取、远程监控
- 第七届蓝桥杯—冰雹数
- 利用JS封装iframe骗过搜索引擎
- Python中的排列和组合
- Android可左右滑动的ListView开源框架SwipeMenuListView
- muduo库中对线程池的实现(1)
- Spring学习-30:Spring中的事务管理之环境搭建
- mysql表的清空、删除和修改操作详解
- Wifi-direct 相关记录
- linux之进程详解与操作编程
- 2017年最新cvv2知识普及
- STM32中的几个时钟SysTick、FCLK、SYSCLK、HCLK(For STM32F10x)
- params、out和ref
- python xrange和range的使用区别