线程池

一、线程池资源。
线程池接口设计说明书.doc  -> 关于线程池中接口使用:参数,头文件,原型,返回值..
pool_test/               -> 线程池源码以及小例子。

main.c         -> 使用线程池接口实现的一个小例子。
thread_pool.c  -> 线程池源码
thread_pool.h  -> 线程池函数声明,结构体声明,宏定义。

二、线程池原理。
1、 线程池意义?
可以同时处理多个任务。

2、 线程池机制?
线程池好比是一家公司,一边不断接收任务,员工就一边不断去处理任务。
生产者: 专门投放任务到线程池的任务。
消费者: 处理任务的这些线程。

3、 如何描述一个线程池状态?  -> 结构体

struct task
{
    void *(*do_task)(void *arg); //函数指针
    void *arg;//参数

    struct task *next;
};

typedef struct thread_pool
{
    pthread_mutex_t lock;  //互斥锁
    pthread_cond_t  cond;  //条件变量
    bool shutdown;         //线程池标志位:  true -> 关闭   flase  -> 开启
    struct task *task_list;//指向一条任务链表的链表头
    pthread_t *tids;       //存储全部线程的ID号。
    unsigned max_waiting_tasks;  //最大的等待任务个数  
    unsigned waiting_tasks;      //当前正在等待任务个数  
    unsigned active_threads;     //当前线程池中有多少条线程
}thread_pool;


三、分析函数接口。
1、 初始化线程池。  -> init_pool()

原型:
bool init_pool(thread_pool *pool, unsigned int threads_number);

参数:
pool:线程池的地址
threads_number:线程池初始化线程的条数。

功能: 初始化一些值,设置一些值,创建线程。

2、 投放任务。  -> add_task()

原型:
bool add_task(thread_pool *pool,void *(*do_task)(void *arg), void *arg)

参数:
pool:线程池的地址。
do_task: 需要处理的任务的函数接口。
arg:传递给函数接口的参数

功能:将新任务弄成一个节点,然后将节点尾插为任务队列后面。

3、 线程的例程。
功能:拿走任务队列中的一个节点,然后执行该节点中的函数。


4、 添加线程。 ->  add_thread()
int add_thread(thread_pool *pool, unsigned additional_threads)

参数:
pool:线程池的地址
additional_threads:线程池新增线程的条数。

功能: 添加一个新的线程到线程池。

5、 删除线程。  -> remove_thread()
int remove_thread(thread_pool *pool, unsigned int removing_threads)

参数:
pool:线程池的地址
removing_threads:线程池删除线程的条数。

功能: 删除线程池中的一些线程。

6、销毁线程池。
关闭线程池,唤醒所有小孩起来退出。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值