1 Star 0 Fork 0

请你或阔落/threadpool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
ThreadPool.h 1.71 KB
一键复制 编辑 原始数据 按行查看 历史
请你或阔落 提交于 2024-05-06 15:51 . fix
#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
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/Cwm341638/threadpool.git
[email protected]:Cwm341638/threadpool.git
Cwm341638
threadpool
threadpool
master

搜索帮助