|
Console Library 8.0.0
A header-only library that makes C++ simple
|
线程池执行器类,用于管理和执行并发任务。 More...
#include <pool.h>
Classes | |
| struct | TaskBase |
| 任务基类,提供多态接口。 More... | |
| struct | Task |
| 具体任务类模板,封装 std::packaged_task。 More... | |
Public Types | |
| enum class | launch : bool { abort , close } |
Public Member Functions | |
| ThreadPool (launch exit_launch=launch::close, size_t num_threads=std::thread::hardware_concurrency()) | |
| 构造函数,创建指定数量的工作线程。 | |
| ThreadPool (size_t num_threads, launch exit_launch=launch::close) | |
| 构造函数,创建指定数量的工作线程。 | |
| ~ThreadPool () | |
| 析构函数,根据退出策略决定关闭方式。 | |
| template<class F, class... Args> | |
| auto | submit (F &&f, Args &&...args) -> std::future< decltype(std::forward< F >(f)(std::forward< Args >(args)...))> |
| 提交一个可调用对象到线程池执行。 | |
| template<class F, class Container> | |
| auto | map (F &&func, const Container &items) -> std::vector< std::future< decltype(func(std::declval< typename Container::value_type >()))> > |
| 批量提交任务,对容器中的每个元素应用函数。 | |
| void | wait () |
| 等待所有已提交的任务完成。 | |
| size_t | waiting_task_count () const |
| 获取当前任务队列中的任务数量。 | |
| size_t | active_task_count () const |
| 获取当前正在执行的任务数量。 | |
| size_t | active_worker_count () const |
| 获取当前存活的工作线程数。 | |
| void | close () |
| 优雅关闭线程池,等待所有任务完成。 | |
| void | abort () |
| 粗暴地关闭线程池,用于需要立刻结束一切。 | |
| ThreadPool (const ThreadPool &)=delete | |
| 禁止拷贝构造。 | |
| ThreadPool & | operator= (const ThreadPool &)=delete |
| 禁止拷贝赋值。 | |
| ThreadPool (ThreadPool &&)=delete | |
| 禁止移动构造。 | |
| ThreadPool & | operator= (ThreadPool &&)=delete |
| 禁止移动赋值。 | |
Private Attributes | |
| std::vector< std::thread > | workers |
| 工作线程容器 | |
| std::queue< std::unique_ptr< TaskBase > > | tasks |
| 待执行任务队列 | |
| std::mutex | mutex |
| 保护任务队列的互斥锁 | |
| std::condition_variable | cv |
| 用于线程等待和唤醒的条件变量 | |
| std::atomic< bool > | shutdown |
| 线程池关闭标志 | |
| std::atomic< size_t > | active_tasks |
| 当前正在执行的任务数 | |
| launch | exit_launch_ |
| 退出策略 | |
线程池执行器类,用于管理和执行并发任务。
该类提供了一个固定大小的线程池,支持提交可调用对象(函数、lambda、绑定表达式等), 并返回 std::future 对象以获取任务的执行结果。模仿了 Python 的 concurrent.futures.ThreadPoolExecutor 接口。
|
strong |
|
inline |
构造函数,创建指定数量的工作线程。
| num_threads | 线程池中的线程数量。 |
创建 num_threads 个工作线程,每个线程不断从任务队列中取出任务并执行, 当线程池关闭且任务队列为空时,线程会退出。
|
inline |
构造函数,创建指定数量的工作线程。
| num_threads | 线程池中的线程数量。 |
创建 num_threads 个工作线程,每个线程不断从任务队列中取出任务并执行, 当线程池关闭且任务队列为空时,线程会退出。
|
delete |
禁止拷贝构造。
|
delete |
禁止移动构造。
|
inline |
粗暴地关闭线程池,用于需要立刻结束一切。
设置关闭标志,不等待已提交的任务,然后分离所有工作线程并退出。 最好不要直接调用,除非必须,调用后线程池将无法再提交新任务。
|
inline |
获取当前正在执行的任务数量。
返回已经被工作线程取走但尚未执行完成的任务数量。
|
inline |
获取当前存活的工作线程数。
取决于构造线程池时传入的 num_threads。
|
inline |
优雅关闭线程池,等待所有任务完成。
设置关闭标志,等待所有已提交的任务执行完毕,然后等待所有工作线程退出。 该方法会等待任务队列中的所有任务完成后再关闭线程池,调用后线程池将无法再提交新任务。
|
inline |
批量提交任务,对容器中的每个元素应用函数。
| F | 可调用对象的类型。 |
| Container | 容器类型,必须包含 value_type 成员类型。 |
| func | 要应用于每个元素的函数。 |
| items | 包含输入元素的容器。 |
| AsyncError | 如果线程池正在关闭,则抛出异常。 |
对容器中的每个元素调用 submit(func, item),将所有返回的 future 对象 收集到 vector 中返回。可用于并行处理集合中的元素。
|
delete |
禁止拷贝赋值。
|
delete |
禁止移动赋值。
|
inline |
提交一个可调用对象到线程池执行。
| F | 可调用对象的类型。 |
| Args | 参数包的类型。 |
| f | 要执行的可调用对象(函数、lambda 等)。 |
| args | 传递给可调用对象的参数。 |
| AsyncError | 如果线程池正在关闭,则抛出异常。 |
将参数绑定到可调用对象后添加到任务队列,由工作线程异步执行。 返回的 future 对象可用于等待任务完成并获取返回值。
|
inline |
等待所有已提交的任务完成。
阻塞当前线程,直到任务队列为空且所有正在执行的任务都已完成。 可用于需要等待所有后台任务完成后再继续执行的场景。
|
inline |
获取当前任务队列中的任务数量。
返回尚未被工作线程取走的任务数量。注意:正在执行的任务不计入队列大小。
|
private |
当前正在执行的任务数
|
private |
用于线程等待和唤醒的条件变量
|
private |
退出策略
|
mutableprivate |
保护任务队列的互斥锁
|
private |
线程池关闭标志
|
private |
待执行任务队列
|
private |
工作线程容器