简单线程池的设计
在网上观摩了一些大佬关于线程池的实现后,我决定也亲手写一下简单线程池,首先先解释一下什么是线程池,简单的来说, 就是预先创建一些线程,使它们处于睡眠状态,当任务来临时,唤醒线程让它们去执行。 使用线程池的好处有很多,比如,1.线程的创建和销毁的开销,无论从时间还是空间上来说是巨大的,而通过线程池的重用大大减少了这些不必要的开销,当然既然少了这么多消费内存的开销,其线程执行速度也是得到提升,2.还有有效的控制线程的并发数,控制线程的并发数可以有效的避免大量的线程争夺CPU资源而造成堵塞。 关于设计这个线程池,从概念出发,预先创建一些线程(创建线程,其后必须也伴随着销毁线程),使它们处于睡眠状态(挂起或者阻塞态),当任务来临时(设计一个队列专门装任务),唤醒线程并执行(线程函数所完成),同时再设计一个具体描述任务的父类并设置成纯虚函数,用户在使用此线程池的时候,只需要重写父类就可以了,所以大致需要实现的功能如下图所示: 接下来按每个功能进行讲述: 1.创建线程 1 //先检查参数正确性 2 if(ThreadNUM_MIN < 0 || ThreadNUM_MAX < ThreadNUM_MIN) 3 return false; 4 //创建信号量(在创建线程前创建信号量,防止线程空转) 5 m_hSemphore = CreateSemaphore(NULL,0