有什么办法可以知道线程是创建成功还是失败?

问题描述

我正在使用 std::thread 创建一个线程,但似乎没有 API 可以判断此操作是成功还是失败。有没有办法知道这些信息?

解决方法

在现代编程语言中有两种流行的方法来确定不可靠操作的成功与否。

  • 有返回状态码或可读错误码,表示操作是否成功。这是在 C 程序中使用的较旧的方法,因此它们中的许多人使用 POSIX 接口。在这种风格下,函数和方法的语义只是尝试来执行一个操作。从函数或方法返回时,您知道已经进行了尝试,但不知道是否成功。

  • 当且仅当操作失败时才抛出异常。这是较新的方法,用于编写良好的 C++ 程序和 C++ 标准库。使用这种风格,函数、方法和构造函数具有执行操作的语义。从函数、方法或构造函数返回时,您知道操作已成功。

因此,在您的特定情况下,从线程构造函数返回意味着线程已成功创建,无需检查状态代码。

,

请参阅 reference 以了解 std::thread 构造函数:

std::system_error 如果线程无法启动。

这是 C++ 中的一般做法。当构造函数失败时,您会引发异常,否则您的对象将处于尴尬的无效状态,这是标准库通常会避免的。

,

std::thread 的构造函数在失败时抛出异常。

https://en.cppreference.com/w/cpp/thread/thread/thread

例外 3)
std::system_error 如果线程无法启动。 异常可能代表错误条件 std::errc::resource_unavailable_try_again 或其他 特定于实现的错误条件。

如果您使用特定于操作系统的线程机制,您可以查找它们各自的 (C) API:
Windows
Linux