thread

定义用于查看和管理应用程序中执行线程的对象。

语法

class thread;

备注

可以使用 thread 对象查看和管理应用程序中的执行线程。 使用默认构造函数创建的 thread 对象不与任何执行线程相关联。 通过使用可调用对象构造的 thread 对象创建一个新的执行线程,并在 thread 中调用此可调用对象。 Thread 对象可以移动但不能复制,这就是执行线程只能与一个 thread 对象关联的原因。

每个执行线程都具有 thread::id 类型的唯一标识符。 函数 this_thread::get_id 返回调用线程的标识符。 成员函数 thread::get_id 返回由 thread 对象管理的线程标识符。 对于默认构造的 thread 对象,thread::get_id 方法返回具有值的对象,该值与所有默认构造的 thread 对象的值相同但和 this_thread::get_id 返回的任何线程(可在调用时联接)的值不同。

成员

公共类

名称 描述
id 标识唯一关联的线程。

公共构造函数

名称 描述
thread 构造 thread 对象。

公共方法

名称 描述
detach thread 对象拆离相关联的线程。
get_id 返回关联线程的唯一标识符。
hardware_concurrency 静态。 返回硬件线程上下文的估计数量。
join 阻止,直到完成关联的线程。
joinable 指定关联的线程是否可联接。
native_handle 返回表示线程句柄的特定于实现的类型。
swap 与指定的 thread 对象交换对象状态。

公共运算符

“属性” 描述
thread::operator= 将线程与当前 thread 对象关联。

要求

标头<thread>

命名空间:std

detach

拆离相关联的线程。 操作系统负责释放终止的线程资源。

void detach();

备注

调用 detach 后,对 get_id 的后续调用将返回 id

如果与调用对象关联的线程不可联接,该函数将引发一个错误代码为 invalid_argumentsystem_error

如果与调用对象相关联的线程无效,该函数将引发将引发一个错误代码为 no_such_processsystem_error

get_id

返回关联线程的唯一标识符。

id get_id() const noexcept;

返回值

一个 id 对象,唯一标识关联的线程,如果该对象没有任何关联的线程,则为 id()

hardware_concurrency

静态方法,返回硬件线程上下文数量的估计值。

static unsigned int hardware_concurrency() noexcept;

返回值

硬件线程上下文数量的估计值。 如果无法计算该值或该值未正确定义,此方法将返回 0。

Microsoft 专用

hardware_concurrency 当前定义为返回逻辑处理器的数量,该数量对应于可同时执行的硬件线程的数量。 它考虑物理处理器的数量、每个物理处理器中内核的数量,以及每个单内核上的同时多线程处理。

但是,在具有超过 64 个逻辑处理器的系统上,此数量的上限为单个组中逻辑处理器的数量:请参阅处理器组

id

为过程中的每个执行线程提供唯一标识符。

class thread::id {
    id() noexcept;
};

备注

默认构造函数创建一个对象,该对象与任何现有线程的 thread::id 对象都不相等。

所有默认构造的 thread::id 对象都相等。

join

阻止,直到完成与调用对象相关联的执行线程。

void join();

注解

调用成功后,再继续调用 get_id,以便调用对象返回默认值 thread::id,该默认值与任何现有线程的 thread::id 都不相等;如果调用不成功,get_id 返回的值保持不变。

joinable

指定关联的线程是否可联接。

bool joinable() const noexcept;

返回值

如果关联的线程可联接,则为 true;否则为 false

备注

如果 get_id() != id(),则线程对象可联接。

native_handle

返回表示线程句柄的特定于实现的类型。 可以以特定于实现的方式使用线程句柄。

native_handle_type native_handle();

返回值

native_handle_type 被定义为可强制转化为 void * 的 Win32 HANDLE

thread::operator=

将指定对象的线程与当前对象相关联。

thread& operator=(thread&& Other) noexcept;

参数

Other
thread 对象。

返回值

*this

注解

如果调用对象可联接,该方法会调用拆离。

建立关联后,将 Other 设置为默认构造状态。

swap

与指定的 thread 对象交换对象状态。

void swap(thread& Other) noexcept;

参数

Other
thread 对象。

thread 构造函数

构造 thread 对象。

thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);

thread(thread&& Other) noexcept;

参数

F
要由线程执行的应用程序所定义的函数。

A
要传递到 F 的参数列表。

Other
一个现有的 thread 对象。

备注

第一个构造函数构造与执行线程不相关联的对象。 通过调用 get_id 返回的构造对象的值为 thread::id()

第二个构造函数构造一个对象,该对象与新的执行线程关联并执行在 <functional> 中定义的伪函数 INVOKE。 如果用于启动新线程的资源不足,该函数将引发一个错误代码为 resource_unavailable_try_againsystem_error 对象。 如果对 F 的调用终止并捕获异常,则调用 terminate

第三个构造函数将构造一个对象,该对象与关联 Other 的线程相关。 随后, Other 会被设置为默认构造状态。

另请参阅

头文件引用
<thread>