基于C++11实现线程池
0x00 导入
前些日子通过阅读几篇博客,大体学习了一下C++的并发编程(主要是多线程、异步部分)。手撸了一个多生产者-多消费者模型之后,最终觉得这也只是小打小闹而已,需要整个硬货。经过一番思考之后,手撸一个线程池貌似是一个非常合适的练习。线程池前前后后一共折腾了四五个小时左右,最令我意外的是——原本以为最难理解的并发部分反而是最简单的部分,线程池实现中大量的CPP11语法糖才是真正影响我理解的部分。经过三四个小时的阅读博文、查阅资料以及向大佬求教之后,我才真正对线程池实现有了比较深入地理解。“纸上得来终觉浅,绝知此事要躬行。”经历这一番折腾后才清楚地认识到了自己对CPP11理解的薄弱,遂写下这篇博客来总结自己对线程池实现以及所涉及到的CPP11语法糖的理解,方便自己以后再次阅读源码时有所考据。
文章大量借鉴、节选了众多参考资料,并结合自己的理解进行讲解。参考资料会在最后列出。
这篇总结会将重心放在C++11的语法糖上,对于C++11的并发编程部分(std::thread
, std::future
等)将仅进行最简洁最必要的阐述。有关并发编程部分可以移步至几篇大佬总结的比较好的博文中进行补充学习:
- 《C++并发编程(从C++11到C++17)》:https://paul.pub/cpp-concurrency
- 《从pthread转换到std::thread》:https://segmentfault.com/a/1190000002655852
- 《货比三家:C++中的task based并发》:https://segmentfault.com/a/1190000002706259