YSTest: ystdex::thread_pool类 参考

YSTest PreAlpha_b800_20170810 The YSLib Test Project

- 首页
- 相关页面
- 模块
- 命名空间
- 类
- 文件

- 类列表
- 类索引
- 类继承关系
- 类成员

Public 成员函数 | Private 属性 | 所有成员列表
ystdex::thread_pool类 参考

线程池。 更多...

`#include <concurrency.h>`

类 ystdex::thread_pool 继承关系图:
[图例]

## Public 成员函数

| thread_pool (size_t, std::function< void()>={}, std::function< void()>={})
| 初始化：使用指定的初始化和退出回调指定数量的工作线程。 更多...
| ~thread_pool ()
| 析构：设置停止状态并等待所有执行中的线程结束。 更多...
template<typename _fCallable , typename... _tParams>
future_result_t< _fCallable, _tParams... > | enqueue (_fCallable &&f, _tParams &&...args)
size_t | size () const
size_t | size_unlocked () const
template<typename _fWaiter , typename _fCallable , typename... _tParams>
future_result_t< _fCallable, _tParams... > | wait_to_enqueue (_fWaiter waiter, _fCallable &&f, _tParams &&...args)
| 等待操作进入队列。 更多...

## Private 属性

std::vector< std::thread > | workers {}
std::queue< std::packaged_task< void()> > | tasks {}
std::mutex | queue_mutex {}
std::condition_variable | condition {}
bool | stopped = {}
| 停止状态。 更多...

## 详细描述

线程池。

注解
  除非另行约定，所有公开成员函数线程安全。
  未控制线程队列的长度。

自从
  build 520

在文件 concurrency.h 第 92 行定义.

## 构造及析构函数说明

ystdex::thread_pool::thread_pool | ( | size_t | ,
|  | std::function< void()> | = `{}`,
|  | std::function< void()> | = `{}`
| ) |  |

初始化：使用指定的初始化和退出回调指定数量的工作线程。

注解
  若回调为空则忽略。
  线程数为 0 时无任务，不提供特别的检查。

警告
  回调的执行不提供顺序和并发安全保证。

自从
  build 543

ystdex::thread_pool::~thread_pool | ( |  | ) |

析构：设置停止状态并等待所有执行中的线程结束。

注解
  断言设置停止状态时不抛出 std::system_error 。
  可能阻塞。忽略每个线程阻塞的 std::system_error 。
  无异常抛出：断言。

自从
  build 552

## 成员函数说明

template<typename _fCallable , typename... _tParams>

future_result_t<_fCallable, _tParams...> ystdex::thread_pool::enqueue | ( | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

inline

参见
  wait_to_enqueue

自从
  build 623

在文件 concurrency.h 第 131 行定义.

参考 yforward , 以及 ynothrow.

size_t ystdex::thread_pool::size | ( |  | ) | const

size_t ystdex::thread_pool::size_unlocked | ( |  | ) | const

inline

警告
  非线程安全。

自从
  build 552

在文件 concurrency.h 第 146 行定义.

template<typename _fWaiter , typename _fCallable , typename... _tParams>

future_result_t<_fCallable, _tParams...> ystdex::thread_pool::wait_to_enqueue | ( | _fWaiter | waiter,
|  | _fCallable && | f,
|  | _tParams &&... | args
| ) |  |

inline

等待操作进入队列。

参数

  f | 准备进入队列的操作
  args | 进入队列操作时的参数。
  waiter | 等待操作。

前置条件
  waiter 调用后满足条件变量后置条件；断言：持有锁。

返回
  任务共享状态（若等待失败则无效）。

警告
  需要确保未被停止（未进入析构），否则不保证任务被运行。
  使用非递归锁，等待时不能再次锁定。

自从
  build 623

在文件 concurrency.h 第 164 行定义.

参考 CHRLib::args, CHRLib::f(), ystdex::pack_task(), yassume , 以及 yforward.

参考自 ystdex::task_pool::wait_to_enqueue().

函数调用图:

这是这个函数的调用关系图:

## 类成员变量说明

std::condition_variable ystdex::thread_pool::condition {}

private

在文件 concurrency.h 第 99 行定义.

std::mutex ystdex::thread_pool::queue_mutex {}

mutableprivate

在文件 concurrency.h 第 98 行定义.

bool ystdex::thread_pool::stopped = {}

private

停止状态。

注解
  仅在析构时设置停止。

自从
  build 538

在文件 concurrency.h 第 105 行定义.

std::queue<std::packaged_task<void()> > ystdex::thread_pool::tasks {}

private

自从
  build 624

在文件 concurrency.h 第 97 行定义.

std::vector<std::thread> ystdex::thread_pool::workers {}

private

在文件 concurrency.h 第 95 行定义.

该类的文档由以下文件生成:

- concurrency.h