用C++11
来实现一个简单的线程池。
基本用法:
// 创建带有4个工作线程的线程池
// create thread pool with 4 worker threads
ThreadPool pool(4);
// 将任务压入工作队列,线程处理后的结果保存在future中
// enqueue and store future
auto result = pool.enqueue([](int answer) { return answer; }, 42);
// 从future中获得线程处理后的结果
// get result from future
std::cout << result.get() << std::endl;
源码中用到了许多C++11
的特性,需要了解以下的知识点,能够更清晰地理解实现的过程:
- using定义别名
- lambda表达式
- 模板、可变参数模板
- 尾置返回类型
- std::chrono
- std::mutex
- std::bind
- std::function - 官方文档
- std::unique_lock - 官方文档
- std::condition_variable - 官方文档
- std::forward - 官方文档,讲解C++11左值,右值,左值引用,右值引用的博客
- std::packaged_task - 官方文档
一些有参考意义的博客: