线程池案例

线程池案例:

 

线程池模块分析:

  • 1.main();

    创建线程池。
    
    向线程池中添加任务。借助回调处理任务。
    
    销毁线程池。

  • 2.pthreadpool_create();

    创建线程池结构体  指针。
    
    初始化线程池结构体{N个成员变量}
    
    创建N个任务线程。
    
    创建1个管理者线程。
    
    失败时,销毁开辟的所有空间。(释放)
  • 3.threadpool_thread()

    进入子线程回调函数
    
    接收参数void*arg-->pool结构体
    
    加锁--》lock--》整个结构体
    
    判断条件变量--》wait--------------170

  • 4.adjust_thread()

    循环10S执行一次。
    
    进入管理者线程回调函数。
    
    接收参数void*arg-->pool结构体
    
    加锁---》lock--》整个结构体锁
    
    获取管理线程池要用到变量。task_num,live_num,busy_num
    
    根据既定算法,使用上述3变量,判断是否应该 创建、销毁线程池中 指定步长的线程。

  • 5.threadpool_add()

    • 总功能:

      模拟生产任务。num【20】
      
      设置回调函数,处理任务。sleep(1)代表处理完成。

    • 内部实现:

      加锁
      
      初始化 任务队列结构体成员。    回调函数function,arg
      
      利用环形队列机制,实现添加任务。借助队尾指针挪移%实现。
      
      唤醒阻塞在 条件变量上的线程。
      
      解锁

  • 6.从3.  中的wait之后继续执行,处理任务。

    加锁
    
    获取 任务处理回调函数, 及参数
    
    利用环形队列机制,实现处理任务。借助队头指针挪移%实现。
    
    唤醒阻塞在条件变量 上的server。
    
    解锁
    
    加锁
    
    该忙线程数++
    
    解锁
  • 7.创建 销毁线程

    管理者线程根据task_num,live_num,busy_num
    
    根据既定算法,使用上述变量,判断是否应该 创建、销毁线程池中 指定步长的线程。
    
    如果满足 创建条件
    • 如果满足  销毁条件

      wait_exit_thr_num=10;
      
      signal给 阻塞在条件变量上的线程 发送 假条件满足信号
      
      跳转至 --170 wait阻塞线程会被假信号 唤醒。判断:wait_exit_thr_num>0 pthread_exit(); 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑马金牌编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值