看完《Windows核心编程》的“线程池”这一章后,仅仅是学到了几个Windows线程池相关的API的,并没有触及到线程池是如何实现的这个层次,总感觉意犹未尽,特别手痒,想要自己实现一个简单的线程池。偶然的,想起了之前买的祁宇老师的《深入应用C++11》中,有一章介绍“使用C++11实现一个线程池”,于是按照原书敲了一顿代码,在VS下顺利运行起来了,兴奋不已。然后,再深入一想,既然是纯C++实现的线程池,那么放到Linux下,也是可以运行的,于是又动手在Linux下折腾了一番,今日终于也运行起来了,特此记录,分享整个折腾过程。
一、线程池
本文主要介绍我在VS2015和Linux g++5.4.0下构建工程、编译和调试的过程,线程池的实现原理和代码解析,大家可以直接去看祁宇老师的书。但是,为免得突兀,我还是摘抄一部分原理如下:
一个完整的线程池包括三层:同步服务层、排队层和异步服务层,其实这也是一种生产者-消费者模式,同步层是生产者,不断将新任务丢到排队层中,因此,线程池需要提供一个添加新任务的接口供生产者使用;消费者是异步层,具体是有线程池中预先创建的线程去处理排队层中的任务。排队层是一个同步队列,它内部保证了上下两层对共享数据的安全访问,同时还要保证队列不会被无限制地添加任务导致内存暴涨。另外,线程池还要提供一个停止接口,让用户能够在需要的时候停止线程池的运行。
二、Windows平台运行
1,环境
1)硬件
通过cmd->systeminfo可以查看CPU信息
Intel64 Family 6Model 58 Stepping 9 GenuineIntel ~3201
它是一个四核处理器(通过process explorer -> system informatio