iPE 线程池

线程池的创建可以参考:swtpool_init

在线程池创建线程的时候,将函数swtpool_thread_func的指针作为参数传给pthread_create;

swtpool_thread_func 则通过调用swtpool_get_work来获取工作队列里待处理的work item(这个队列里的work item就是通过下面的swtpool_add_work函数插入的。

在获得待处理的work item之后,swtpool_thread_func利用获得的参数,来调用相应的函数来处理该work item。

 

向线程池的工作队列里插入work item:swtpool_add_work 

(tpool->queue_tail)->next = workp;

tpool->queue_tail = workp;

 

从工作队列里获取一个work item:swtpool_get_work:

 workp = tpool->queue_head;
 tpool->cur_queue_size--;

 

处理获得的work item:swtpool_thread_func

my_workp = swtpool_get_work (tpool, my_workp);

(*(my_workp->routine)) (my_workp->arg);

 

由于pthread库不是Linux系统默认的库,连接时需要使用库libpthread.a,所以在使用pthread_create创建线程时,在编译中要加-lpthread参数:
gcc -o pthread -lpthread pthread.c 

你可能感兴趣的:(iPE 线程池)