引言
前言
线程池通过预先创建一定数量的线程并保存在内存中,可以避免频繁地创建和销毁线程,降低线程创建和销毁的开销。
简化任务调度:只需要将任务提交给线程池,而不需要关心线程的创建、管理和销毁等细节。线程池会自动将任务分配给空闲的线程执行。
代码位置:https://gitee.com/zhongshield/thread_pool
调用方式
调用方继承Task基类,重写Run接口,
通过线程池提供的SubmiTask接口提交任务。
1 | #include "thread_pool.h" |
执行结果
1 | ubuntu@ubuntu:thread_pool$ g++ main.cpp thread_pool.cpp -lpthread |
实现
1 | #ifndef THREAD_POOL_H |
1 | #include "thread_pool.h" |
总结
线程池ThreadPool 提供SubmitTask接口用于提交任务。SubmitTask接口内部通过wait_for等待条件变量notFull_条件成立(条件为任务队列不满),等待1s后条件仍然不成立,打印任务提交失败。如果任务队列不满,提交的任务会放到任务队列中。
线程池ThreadPool 预先执行Start接口,Start接口内部会创建线程对象,并绑定线程函数为线程池ThreadPool 的成员函数ThreadFunc。
线程池ThreadPool 的成员函数ThreadFunc内部,会获取锁,通过wait等待条件变量notEmpty_条件成立(条件为任务队列不空),如果不空,从任务队列中取一个任务,在任务执行前释放锁(否则会阻塞其它线程获取锁,失去线程池的意义)。