linux线程池分析
https://www.cnblogs.com/zjlbk/p/11359578.html
Linux简单线程池实现(带源码)
https://www.cnblogs.com/jiangzhaowei/p/10383049.html
Linux--线程池与进程池及线程池的简单实现
https://blog.csdn.net/sayhello_world/article/details/72829329
线程池的实现主要借助了携程的思想,主要通过工作队列的方式,将task/worker加入pool,线程从线程池结构中获取task/worker执行。
注意事项:
1、线程是可以同时运行在多cpu上的,所以使用pthread_mutex_t lock锁对pool中队列或链表临界资源进行访问
2、同时使用pthread_cond_wait pthread_cond_signal pthread_cond_broadcast进行同步,这里保证了空闲任务时线程wait,只有忙碌时pthread线程处理函数才处于运行状态,并在加载task/worker和销毁线程池时才确保线程处于忙碌状态。
3、线程处理时需要pthread_cleanup_push pthread_cleanup_pop清除对进行保护,万一在此之前有线程异常退出可以有清楚处理函数对 pthread_mutex_t lock锁进行解锁,防止死锁现象的产生
4、线程处理的task/worker不在线程互斥锁 mutex_lock范围内,并且使用pthread_setcancelstate(DISABLE) pthread_setcancelstate(ENABLE) 对 task/worker处理函数进行保护,防止其他线程 cancel导致处理异常。