2021-01-13

#pragma once
#include <map>
#include <queue>
#include <vector>
#include <iostream>
#include <unistd.h>
#include "CPthread.h"

#define    THREAD_NUM      4           //初始化线程数
#define MAX_THREADNUM   32754       //最多可以开的线程数(亲测)

using namespace std;

typedef void(*Task)(void);

class CThraedPool
{
public:
    CThraedPool(size_t tasksSize, size_t threadsSize);
    void start();                               //线程池启动
    void stop();                                //线程池停止
    void addTask(Task task);                    //添加任务
    int getTaskCount();                         //获取线程池任务数量
    ~CThraedPool();
public:
    static void pthreadfun(int no);            //捕获ctrl+c信号
    static void threadRoutine(void* arg);
    Task take();                               //领取任务
private:
    queue<Task> m_tasksqueue;                  //任务队列
    vector<CThread*> m_threads;                //当前线程向量表
    map<pthread_t, Task> m_workqueue;          //工作队列
private:
    pthread_mutex_t m_mutex;                    //互斥锁
    pthread_cond_t  m_cond;                     //条件变量
private:
    bool m_isQuit;                               //线程池退出
    int m_threadsMax;                            //最大线程数
    int m_threadsSize;                           //线程数
    int m_waitCount;                             //空闲线程数
    int m_tasksSize;                             //任务数
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值