Linux 下C语言简单实现线程池(2)

thread.c文件

/**********************************
 * @author      wallwind@yeah.net
 * @date        2012/06/13
 * Last update: 2012/06/13
 * License:    LGPL
 *
 **********************************/
 
 
 
 #ifndef _THPOOL_
 #define _THPOOL_
 
 #include "global.h"
 /**
 定义一个任务节点
 **/
 typedef void* (*FUNC)(void* arg);
 
 
 typedef struct _thpool_job_t{
// void* (*function)(void* arg);    //函数指针
 FUNC     function;
 void*                  arg;    //函数参数。
 struct _thpool_job_t* prev;    // 指向上一个节点
 struct _thpool_job_t* next;    //指向下一个节点
 } thpool_job_t;
 
 /**
 定义一个工作队列
 **/
 
typedef struct _thpool_job_queue{
 thpool_job_t*    head;            //队列头指针
 thpool_job_t*    tail;      // 队列末尾指针
 int              jobN;      //任务数
 sem_t*          queueSem;    //x信号量
}thpool_jobqueue;
 
 /**
 线程池
 **/
 
 typedef struct _thpool_t{
 pthread_t*      threads;    ////线程指针数
 int       threadsN;    //// 线程数
 thpool_jobqueue* jobqueue;  // 指向队列指针
 }thpool_t;
 
 typedef struct thread_data{                           
 pthread_mutex_t *mutex_p;
 thpool_t        *tp_p;
}thread_data;

//初始化线程池内部的线程数
thpool_t*  thpool_init(int threadN);

void thpool_thread_do(thpool_t* tp_p);

int thpool_add_work(thpool_t* tp_p, void *(*function_p)(void*), void* arg_p);

void thpool_destroy(thpool_t* tp_p);

int thpool_jobqueue_init(thpool_t* tp_p);

void thpool_jobqueue_add(thpool_t* tp_p, thpool_job_t* newjob_p);

int thpool_jobqueue_removelast(thpool_t* tp_p);

thpool_job_t* thpool_jobqueue_peek(thpool_t* tp_p);

void thpool_jobqueue_empty(thpool_t* tp_p);

#endif

 

C语言实现简单线程池

基于pthread的线程池,C++实现

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/9f4d0d2a4e7fae1b880d046d0afc9af0.html