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

如果与调用对象关联的线程不可联接,该函数将引发错误代码为 system_error /> 的 invalid_argument线程。

如果与调用对象关联的线程无效,该函数将引发错误代码为 system_error /> 的 no_such_process线程。

get_id

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

id get_id() const noexcept;

返回值

唯一 id 标识关联线程的对象,或者 id() 如果没有与该对象关联的线程。

hardware_concurrency

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

static unsigned int hardware_concurrency() noexcept;

返回值

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

Microsoft 专用

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

在 Windows 11 和 Windows Server 2022 之前,应用程序默认限制为单个处理器组,最多具有 64 个逻辑处理器。 这会将并发执行的线程数限制为 64。 有关详细信息,请参阅 处理器组

从 Windows 11 和 Windows Server 2022 开始,进程及其线程具有处理器相关性,默认情况下跨系统中的所有处理器以及具有 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定义为 Win32 HANDLE 强制转换。void *

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>