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
线程。
如果与调用对象关联的线程无效,该函数将引发错误代码为 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_again
的 system_error
对象。 如果对 F
的调用终止并捕获异常,则调用 terminate
。
第三个构造函数将构造一个对象,该对象与关联 Other
的线程相关。 随后, Other
会被设置为默认构造状态。