代码拉取完成,页面将自动刷新
#ifndef __THREADPOOL_H__:
#define __THREADPOOL_H__
#include <memory>
#include <vector>
#include <functional>
#include <mutex>
#include <queue>
#include <atomic>
#include <thread>
#include <condition_variable>
#include <chrono>
#include <iostream>
#include "Nocopyable.hpp"
#include "Task.h"
enum class PoolMode
{
MODE_FIXED, // 线程池模式 fixed 固定线程数量模式
MODE_CACHED, // cached 动态增长线程模式
};
/*
*线程池实现
* */
class ThreadPool:public Nocopyable
{
public:
ThreadPool();
~ThreadPool();
void start(size_t initThreadSize);
void setMode(PoolMode mode);//设置线程池模式
void setTaskQueMaxThreshHold(int threshhold); //设置线程池任务最大数量
void setThreadSizeThreshHold(int threshhold); //设置线程池线程最大数量
void submitTask(std::shared_ptr<Task>& task); //提交任务
private:
class Thread{
using ThreadFunc=std::function<void()>;
public:
Thread(ThreadFunc && func);
void start();
private:
ThreadFunc func_; //线程入口函数
};
private:
void threadFunc();
private:
size_t initThreadSize_; //初始化线程池 线程数量
std::atomic_int threadSize_;//线程池线程数量
size_t threadSizeThreshHold_; //线程池线程数量上限
size_t taskSizeThreshHold_ ; //线程池任务数量上限
PoolMode mode_; //线程池模式
std::vector<std::unique_ptr<Thread>> threads_; //线程池线程容器
std::queue<std::shared_ptr<Task>> taskQue_;
std::atomic_uint taskSize_; //线程池任务数量
std::recursive_mutex mutex_; //线程池任务队列互斥锁
std::condition_variable_any notFull_;
std::condition_variable_any notEmpty_;
};
#endif
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。