博主介绍:程序喵大人
- 35 - 资深C/C++/Rust/Android/iOS客户端开发
- 10年大厂工作经验
- 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
- 《C++20高级编程》《C++23高级编程》等多本书籍著译者
- 更多原创精品文章,首发gzh,见文末
- 👇👇记得订阅专栏,以防走丢👇👇
😉C++基础系列专栏
😃C语言基础系列专栏
🤣C++大佬养成攻略专栏
🤓C++训练营
👉🏻个人网站
概述
这里介绍一个功能完整C++线程池实现,本线程池设计精巧,支持核心线程与缓存线程管理、任务队列限制、异常处理、优雅关闭等高级特性,详见下文。
核心特性
1. 灵活的线程管理
线程池实现了两种线程类型:
- 核心线程:始终保持活跃,不会被回收
- 缓存线程:在任务高峰时创建,空闲超时后自动回收
cpp
enum class ThreadFlag {
kInit = 0, // 初始状态
kCore = 1, // 核心线程
kCache = 2 // 缓存线程
};
2. 智能的任务调度
线程池使用条件变量(std::condition_variable
)实现高效的任务通知机制:
- 核心线程无限等待新任务
- 缓存线程使用超时等待,避免资源浪费
cpp
if (thread_ptr->flag.load() == ThreadFlag::kCore) {
// 核心线程无限等待
this->task_cv_.wait(lock, [this, thread_ptr] { ... });
} else {
// 缓存线程带超时等待
this->task_cv_.wait_for(lock, this->config_.time_out, [this, thread_ptr] { ... });
}
3. 全面的异常处理
每个任务都被try-catch块包裹,确保异常不会逃逸到线程函数外:
cpp
this->tasks_.emplace([task]() {
try {
(*task)();
} catch (const std::exception& e) {
std::cerr << "Task execution failed: " << e.what() << std::endl;
} catch (...) {
std::cerr << "Task execution failed with unknown exception" << std::endl;
}
});
4. 优雅的关闭机制
提供两种关闭方式:
ShutDown()
:等待所有任务完成ShutDownNow()
:立即终止所有线程
cpp
void ShutDown(bool is_now) {
if (is_available_.load()) {
if (is_now) {
this->is_shutdown_now_.store(true);
} else {
this->is_shutdown_.store(true);
}
this->task_cv_.notify_all();
is_available_.store(false);
}
}
使用示例
基本用法
cpp
// 创建线程池配置
meow::ThreadPool::ThreadPoolConfig config(2, 4, 50);
meow::ThreadPool pool(config);
// 启动线程池
pool.Start();
// 提交任务
autofuture = pool.Run([]() {
return fibonacci(10);
});
// 获取结果
if (future) {
std::cout << "Result: " << future->get() << std::endl;
}
异常处理示例
cpp
auto future = pool.Run([]() {
return potentially_throwing_task(true);
});
try {
if (future) future->get();
} catch (const std::exception& e) {
std::cerr << "Caught exception: " << e.what() << std::endl;
}
性能考虑
- 锁粒度优化:任务执行在锁外进行,减少锁持有时间
- 原子操作 :使用
std::atomic
实现无锁计数器 - 动态扩展:根据负载自动调整线程数量
- 资源限制:防止任务队列无限增长导致内存问题
总结
代码详见:GitHub - C++线程池实现。
码字不易,欢迎大家点赞,关注,评论,谢谢!
👉C++训练营
一个专为校招、社招3年工作经验的同学打造的 1v1 项目实战训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,已帮助多名学员获得大厂offer!