基于 C++ 手写线程池
前言
本文将基于 C++ 手写一个线程池,并分别提供 C++ 11 和 C++ 17 两种版本的线程池实现。线程池作为五大池之一(内存池、连接池、协程池、线程池、进程池),应用非常广泛,不管是客户端程序,还是后台服务程序,都是提高业务处理能力的必备模块。有很多开源的线程池实现,虽然各自接口在使用上稍有区别,但是其核心实现原理都是基本相同的。
知识背景
在基于 C++ 手写线程池之前,应该熟悉并掌握以下技术内容:
- 熟练基于 C++ 11 的面向对象编程
- 熟悉组合和继承、继承多态、STL 容器、智能指针、函数对象、绑定器、
lambda
表达式、可变参数模板编程等。 - 熟悉 C++ 11 多线程编程,比如线程互斥、线程同步、原子操作、CAS 等。
- 熟悉
thread
、mutex
、unique_lock
、condition_variable
、atomic
等。 - 熟悉 C++ 17 和 C++ 20 的新特性,比如 C++ 17 的
any
类型和 C++ 20 的counting_semaphore
信号量类型等。