线程池

    科技2024-10-29  11

    一、线程池资源。 线程池接口设计说明书.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、销毁线程池。 关闭线程池,唤醒所有小孩起来退出。

     

    Processed: 0.009, SQL: 8