已完成并发编程C++17项目 04

ThreadPool

把任务提交、线程调度、结果获取和优雅停机收敛成一个可复用的 C++17 线程池。

任务通道packaged_task · future
同步方式mutex · condition_variable
验证记录10,000 任务 · ASan 无泄漏

项目结构

调用方通过 enqueue 提交可调用对象,线程池将任务类型擦除后放入队列,worker 取出任务并在锁外执行,结果通过 future 返回。

关键取舍

  • 条件变量使用谓词等待,避免虚假唤醒导致空队列访问。
  • 任务从队列取出后在锁外执行,缩短临界区,避免慢任务阻塞其他 worker。
  • 析构时先设置 stop,再唤醒线程,最后 join;队列中的任务会被排空后再退出。

实验记录

仓库记录了 2、4、8 线程 benchmark、10,000 个任务的并发计数测试和 ASan 检查。4 核虚拟机中,2 线程约 4ms、4 线程约 3ms、8 线程约 3ms;8 线程没有继续下降符合当前环境预期,ASan 下耗时放大属于检测开销。

当前实现仍是最小闭环,尚未加入有界队列、拒绝策略、任务优先级和动态扩缩容。