线程池的设计(二):领导者追随者线程池的设计
接上文:线程池的设计(一):半同步半异步线程池的设计 领导者追随者模式在使用方式上与半同步半异步模式相同,以下主要介绍不同的实现部分,相同部分一笔带过。 本文讲述的只是领导者追随者线程池的一种实现,不得不说,这种模式真的很复杂。 两种模式的主要区别在于任务队列的实现 。 领导者追随者线程池的工作流程: 代码实现: https://github.com/421986908/Leader_Followers 1. 启动 : a.生成一组线程,放入线程数据; 2. 添加任务 : a.任务队列的实现是一个单向链表,添加任务就是向链表的表尾添加一个元素; 任务队列的实现 : ①. 每一个任务的具体定义应包含以下结构:线程函数名、线程函数传入的参数和指向下一个任务的指针。结构体定义如下: struct job { void* (*callback_function)(void *arg); void *arg; struct job *next; }; ②. 新增任务时,同样要先判断 queue_cur_num 是否大于max_queue_num,判断线程池和队列是否处于服务的状态。添加任务只要将任务添加到链表的表尾即可,核心代码片段如下: pjob->callback_function = callback_function; pjob->arg = arg; pjob->next =