9. 使用Pthreads实现线程池(二)

结构体定义

        首先定义存储任务信息的结构体,我们可以将其抽象为函数指针和参数,如下所示

typedef struct
{
  void *(*function)(void *);// 函数指针
  void *arg;// 函数参数
}THREAD_POOL_TASK;

        接下来定义线程池的结构体,包含线程池的资源和状态等属性,如下所示

typedef struct 
{
  int thread_num;// 工作线程数量
  int task_queue_max_size;// 任务队列的容量
  int task_queue_num;// 加入的任务数量
  int task_queue_front;// 将要保存任务信息的队列索引
  int task_queue_rear;// 将要取出任务信息的队列索引
  pthread_mutex_t lock;// 线程池状态变量操作的互斥锁
  pthread_cond_t task_queue_not_full;// 任务队列有空闲空间的信号
  pthread_cond_t task_queue_not_empty;// 任务队列中有待处理任务的信号
  pthread_t *pt_threads;// 工作线程数组指针
  THREAD_POOL_TASK *pt_task_queue;// 任务队列,环形缓冲区形式
  bool shutdown;// 销毁标志
}THREAD_POOL_ST;

接口定义

1)线程池初始化

        初始化接口定义如下,入参包括线程池句柄指针,工作线程数量,任务队列容量;这里为了避免泄漏具体实现

你可能感兴趣的:(Pthreads,c语言)