02スレッドプール構造の説明情報

02スレッドプール構造の説明情報

01スレッドプールの原理分析
02スレッドプール構造の説明情報
03スレッドプール機能の分析
04スレッドプールの完全なヘッダーファイルと実装ファイル(.c)

直接看代码,代码里有详细的注释。

//描述任务队列的结构体
typedef struct {
    
    
    void *(*function)(void *);          /* 函数指针,回调函数 */
    void *arg;                          /* 上面函数的参数 */
} threadpool_task_t;                    /* 各子线程任务结构体 */

/* 描述线程池相关信息 */
struct threadpool_t {
    
    
    //两把锁与两个条件变量
    pthread_mutex_t lock;               /* 用于锁住本结构体 */    
    pthread_mutex_t thread_counter;     /* 记录忙状态线程个数的琐 --busy_thr_num */

    pthread_cond_t queue_not_full;      /* 当任务队列满时,添加任务的线程(server主线程)阻塞,等待此条件变量.用于S/C之间 */
    pthread_cond_t queue_not_empty;     /* 任务队列里不为空时,通知等待任务的线程.用于Ser即主线程与各个子线程之间. */

    //线程id
    pthread_t *threads;                 /* 存放线程池中每个线程的tid。数组 */
    pthread_t adjust_tid;               /* 存管理线程tid */

    //任务队列,记录客户端的任务请求
    threadpool_task_t *task_queue;      /* 任务队列 */

    //线程个数的范围、实际存在的线程、正在工作的线程、准备销毁的线程
    int min_thr_num;                    /* 线程池最小线程数 */
    int max_thr_num;                    /* 线程池最大线程数 */
    int live_thr_num;                   /* 当前存活线程个数 */
    int busy_thr_num;                   /* 忙状态线程个数 */
    int wait_exit_thr_num;              /* 要销毁的线程个数 */

    //任务队列的头尾指针、队列的实际大小、队列的上限个数
    int queue_front;                    /* task_queue队头下标 */
    int queue_rear;                     /* task_queue队尾下标 */
    int queue_size;                     /* task_queue队中实际任务数 */
    int queue_max_size;                 /* task_queue队列可容纳任务数上限 */

    int shutdown;                       /* 标志位,线程池使用状态,true或false */
};

おすすめ

転載: blog.csdn.net/weixin_44517656/article/details/108690962