200 行 C 代码实现简单线程池 原以为实现一个线程池一定是个规模和难度都是超大的
项目。这阵子有些闲空,就复习了一下 pthreads 的知识。光理论复习不够的,还得上手
写点东西才行。这就想着实现一个线程池试试看吧。没想到 200 行不到就出来了一个可用
的东西。
基本想法是这样的:
1、预创建的线程通过 mutex 休眠在线程池中。这样,通过 unlock 该 mutex 就可以
唤醒该线程了;
2、出于简单性的目标,一个线程池内的所有线程的属性都是相同的。这个属性在创建
线程池可以指定;
3、一般来讲,线程池内的线程不能被取消、或者调用 pthread_exit()退出。这些管
理性工作是由线程池本身完成的。即,在使用线程池借出的线程时,函数返回应该只用
return。
4、从线程池“借出”的线程,可以归还给线程池。实际上也必须归还给线程池,这样线
程池可以完成最后的清理工作。
5、如果实在需要取消一个线程,那么好吧,只是别忘了告诉线程池你取消了它的手下。
PS: 是在 Linux 写的这个程序。完善的话,比如可以根据系统负载调整线程池中
线程的数量;增加更完整的性能测量功能,调试功能;提供更方便的线程属性设置接口;
在 Linux 平台上,可以使用 clone()提供更为灵活的资源策略,等等。(原代码实现:
threadpool.c )